2012-03-03 3 views
8

Webアプリケーション内で、Java SDK7 WatchServiceを使用してディレクトリポーリングBeanを作成しようとしています。私が達成したいのは、アプリケーションをブロックしないように、このBeanを独自のスレッドで実行することです。何かのように:独自のスレッドで実行されるSpring Bean

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

答えて

15

私はあなたが春を使って手動でこのスレッドを作成する必要があります怖い:

<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は単純です:

public class WatchServiceRunnableWrapper implements Runnable { 

    private WatchService WatchService; 

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

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

私はそれをテストしていませんが、それはより多くの、または - 少なくても正常に動作しシャットダウンする必要があります。

+0

WatchServiceは実際には新しいスレッドを作成することではなく、新しいスレッドが作成される場所を説明できますか?ありがとう! –

+0

ああ、私はそれがRunnableを実装することによって行われることがわかります。ありがとう、それは私が探していたexcatlyです! –

+1

'pollThread' beanのクラスがありませんか? – casablanca

1

私は、Java 7のWatchServiceに慣れていないんだけど、あなたは、このためのスプリングスscheduling supportを使用することができます。ここにはyet another tutorialがあり、Spring Scheduledのようなものでグーグルが見つかると、おそらく負荷が増えます。

関連する問題