2012-03-03 27 views
8

Trong ứng dụng web của tôi, tôi đang cố gắng tạo một hạt kiểm tra thư mục bằng cách sử dụng Java SDK7 WatchService. Những gì tôi muốn đạt được là chạy bean này theo chủ đề riêng của nó để nó không chặn ứng dụng. Một cái gì đó như:Spring Bean chạy theo chủ đề riêng của mình

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

Trả lời

15

Tôi sợ bạn sẽ phải tạo ra chủ đề này bằng tay với mùa xuân:

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

Các WatchServiceRunnableWrapper rất đơn giản:

public class WatchServiceRunnableWrapper implements Runnable { 

    private WatchService WatchService; 

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

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

tôi đã không kiểm tra nó, nhưng nó nhiều hơn-hay- ít nên hoạt động và tắt máy một cách duyên dáng.

+0

Vâng, nó không thực sự là về WatchService, nó thực sự là về việc tạo ra một chủ đề mới - bạn có thể giải thích nơi mà các chủ đề mới trong ví dụ của bạn được tạo ra? Cảm ơn! –

+0

Ah, được rồi, tôi có thể thấy nó được thực hiện bằng cách thực hiện Runnable. Cảm ơn, đó là excatly những gì tôi đang tìm kiếm! –

+1

Bạn không bỏ lỡ lớp cho hạt 'pollThread'? – casablanca

1

Tôi không quen thuộc với dịch vụ WatchService của Java 7, nhưng bạn có thể sử dụng Springs 'scheduling support cho việc này. Đây là yet another tutorial và googling cho một cái gì đó như Spring Scheduled có thể tìm thấy tải nhiều hơn nữa.

Các vấn đề liên quan