2012-03-03 18 views
8

Web uygulamamda, Java SDK7 WatchService kullanılarak bir dizin sorgulama çekirdeği oluşturmaya çalışıyorum. Elde etmek istediğim, bu fasulyeyi kendi iş parçacığı içinde çalıştırmak ve böylece uygulamayı engellememesidir. Bir şey gibi:Spring Bean kendi ipliğiyle çalışan

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

cevap

15

Sana Bahar ile manuel Konuyu oluşturmak zorunda korkuyorum:

<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 basittir: Ben test etmedim

public class WatchServiceRunnableWrapper implements Runnable { 

    private WatchService WatchService; 

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

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

, ama daha-veya- Daha az çalışmalı ve kapatılmalı.

+0

Bu gerçekten WatchService ile ilgili değil, gerçekten yeni bir iş parçacığı oluşturmakla ilgilidir - örneğinizdeki yeni iş parçacığının nerede oluşturulduğunu açıklayabilir misiniz? Teşekkürler! –

+0

Ah, tamam, Runnable'ı uygulayarak yapıldığını görebiliyorum. Teşekkürler, bu tam olarak aradığım şey! –

+1

"pollThread" fasulyesi sınıfını kaçırmıyor musunuz? – casablanca

1

Java 7'nin WatchService aşina değilim, ama bunun için Springs'in scheduling support kullanabilirsiniz. İşte yet another tutorial ve Spring Scheduled gibi bir şey için googling muhtemelen daha fazla yük bulur.

İlgili konular