1

我需要監視Web應用程序中兩個目錄中的更改(上載的文件)。我創建了一個ServletContextListener來觸發這兩個目錄的監視。觀察服務Java - 兩個並行線程在後臺

我的問題是,當第一次監測開始時,線程被阻塞,第二次監測無法啓動。

是否可以保持對兩個不同文件夾的並行和背景運行的監控?

我知道問題是由於無限循環,但不知道如何把這個線程放在後臺。任何幫助將不勝感激 。非常感謝你提前

ContextListener

@Override 
    public void contextInitialized(ServletContextEvent event) { 

     Path pathFolder1 = Paths.get("my_folder_1_path"); 
     MyWatcher watcher1 = new MyWatcher(); 

     Path pathFolder2 = Paths.get("my_folder_2_path"); 
     MyWatcher watcher2 = new MyWatcher(); 

     watcher1.startMonitoring(pathFolder1); 
     watcher2.startMonitoring(pathFolder2); 
    } 

MyWatcher

public void startMonitoring(Path directory) { 

     try { 
      FileSystem fs = directory.getFileSystem(); 
      WatchService watcher = fs.newWatchService(); 

      while(true) { 

       directory.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE); 
       WatchKey watckKey = watcher.take(); 
       List<WatchEvent<?>> events = watckKey.pollEvents(); 

       for (WatchEvent event : events) { 

        if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) { 
         System.out.println("File created: " + event.context().toString()); 
        } 
        if (event.kind() == StandardWatchEventKinds.ENTRY_DELETE) { 
         System.out.println("File removed: " + event.context().toString()); 
        } 
       } 
       watckKey.reset(); 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
+0

您使用哪些客戶端技術? – pahan

+0

我的環境是Wildfly10 jsf primefaces – gfinotti

回答

1

應該配置應用程序服務器上的線程工廠,通過@Resource註釋注入它,使用從那裏的線程。谷歌搜索的例子將是a blog entry about this

+1

它運行良好,謝謝@ tirpitz.verus – gfinotti