2009-10-11 157 views
2

我有一個Java EE應用程序,它有兩個組件:第一個是從互聯網上獲取一些信息並將其填充到數據庫中的服務。其次是一個web界面(部署在tomcat上),用戶可以從中瀏覽該信息。Java EE應用程序中的線程

什麼可能是實現第一個組件的最佳方法?它應該作爲後臺守護進程/服務還是容器內的線程運行?

回答

8

我會親自把他們分成不同的過程。除了其他任何東西,這意味着你可以重新啓動一個,而不用擔心另一個。這也意味着你可以很容易地在不同的機器上部署它們,而不需要毫無意義地將Tomcat安裝在一個實際上不需要Web界面的服務上。

+0

您是否認爲java.util.Timer和java.util.TimerTask類可以用於此目的?謝謝 – craftsman 2009-10-11 09:45:13

+0

我在回答中提到的Spring調度類爲java併發對象提供了一個良好的接口,比如Executor,這實際上就是您應該在現代應用程序中使用的接口。 – grkvlt 2009-10-11 10:48:13

7

根據應用程序框架的類型,Spring允許您使用Quartzjava.util.concurrent框架。 Spring有一個TaskExecutor抽象(請參閱Spring documentation),它可以簡化很多這種操作,但請檢查以確定哪種設計最適合您。然後,Spring或Quartz(由Spring管理)控制線程或執行程序或作業的創建和啓動/停止,以及它們的頻率/週期和其他調度參數,還管理任何可能需要的作業池。

我在任何Java EE應用程序中都使用它們來處理所有後臺任務和批處理作業,而且沒有任何問題。由於作業是Spring管理的POJO,因此他們可以訪問Spring所需的完整依賴注入框架等等,當然,您可以根據需要更改或縮放,在調度程序框架之間切換,並對應用程序配置XML文件進行簡單更改。

+0

+1石英上,我用它在許多j2ee應用程序安排後臺進程。 – broschb 2009-10-11 14:45:31