2012-03-03 9 views
8

ciągu mojej aplikacji sieci web, próbuję stworzyć fasoli odpytywania Directory przy użyciu Java SDK7 WatchService. To, co chciałbym osiągnąć, to uruchomić ten komponent w swoim wątku, aby nie blokował aplikacji. Coś jak:Wiosna Bean działa we własnym wątku

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

Odpowiedz

15

obawiam się, trzeba ręcznie utworzyć ten wątek z wiosny:

<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"/> 

WatchServiceRunnableWrapper jest prosta:

public class WatchServiceRunnableWrapper implements Runnable { 

    private WatchService WatchService; 

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

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

ja jej nie testowane, ale to bardziej-lub- mniej powinno działać z wdziękiem i zamknąć się.

+0

No to nie jest tak naprawdę o WatchService, jest naprawdę o stworzenie nowego wątku - można wyjaśnić, gdzie nowy wątek w przykładzie jest tworzona? Dzięki! –

+0

Ach, okay, widzę, że to się dzieje przez wdrożenie Runnable. Dzięki, to jest dokładnie to, czego szukałem! –

+1

Nie brakuje ci klasy dla fasoli 'pollThread'? – casablanca

1

nie jestem zaznajomiony z Java 7 jest WatchService, ale można użyć sprężyn scheduling support do tego. Oto yet another tutorial, a szukanie w Google czegoś podobnego do Spring Scheduled prawdopodobnie znajdzie więcej.

Powiązane problemy