2012-03-03 14 views
8

Dentro de mi aplicación web, intento crear un bean de sondeo de directorios utilizando Java SDK7 WatchService. Lo que me gustaría lograr es ejecutar este bean en su propio hilo para que no bloquee la aplicación. Algo así como:Spring Bean ejecutándose en su propio hilo

<bean id="directoryPoller" class="org...MyDirectoryPoller" scope="thread"/> 

Respuesta

15

Me temo que tendrá que crear manualmente este hilo con la primavera:

<bean id="pollThread" class="java.lang.Thread" init-method="start" destroy-method="interrupt"> 
    <constructor-arg ref="watchServiceRunnableWrapper"/> 
</bean> 

<bean id="watchServiceRunnableWrapper" class="WatchServiceRunnableWrapper"> 
    <constructor-arg ref="watchService"/> 
</bean> 

<bean id="WatchService" class="java.nio.file.WatchService" destroy-method="close"/> 

El WatchServiceRunnableWrapper es simple:

public class WatchServiceRunnableWrapper implements Runnable { 

    private WatchService WatchService; 

    public WatchServiceRunnableWrapper(WatchService watchService) { 
     this.watchService = watchService; 
    } 

    public void run() { 
     watchService.poll(); 
     // 
    } 
} 

Yo no lo he probado, pero más-o- menos debería funcionar y apagarse con gracia.

+0

Bueno, no se trata realmente del WatchService, se trata realmente de crear un nuevo hilo: ¿puede explicar dónde se crea el nuevo hilo en su ejemplo? ¡Gracias! –

+0

Ah, está bien, puedo ver que se hace implementando Runnable. ¡Gracias, eso es exactamente lo que estaba buscando! –

+1

¿No te estás perdiendo la clase del bean 'pollThread'? – casablanca

1

No estoy familiarizado con Java 7 WatchService, pero se puede usar scheduling support Springs para esto. Aquí está yet another tutorial y googlear para algo como Spring Scheduled probablemente encuentre más.

Cuestiones relacionadas