2012-01-25 56 views
0

我是Java開發新手,正在尋找以Java編寫的數據收集應用程序的一般設計模式。 我已經編寫了原型,它是一個基本的Java控制檯應用程序,它使用SAX來檢索數據並將其存儲在數據庫中。SAX數據收集設計模式

顯然,這不是一個Web應用程序,所以它不需要像Tomcat那樣在容器中運行,但是人們會推薦什麼?該應用程序目前使用基本的Java定時器每5分鐘運行一次。

所以,我能想到的基本要求是

  1. 它需要運行所有的時間,所以如果它崩潰,它需要重新啓動。
  2. 它需要每5分鐘完成一次工作,所以需要一個計時器。
  3. 可能使用Hibernate,但如果它創建任何開銷,則不會,因爲這是一個高度日期密集型應用程序。

所以我正在尋找像建議:

你可能想運行在Tomcat下一個計時器控件thingumbob並獲得要求#1 ....或彈簧99擁有所有你需要的功能。

回答

0

對於這種類型的應用程序,你可以有一個產生一個線程,做實際工作的主要處理。這個線程會在一個基本上檢查它是否應該運行的循環中。如果它正在運行,則繼續。一旦它完成了它的工作,你可以使用Thread.sleep(msToSleep)來讓線程休眠5分鐘。所以它會持續不斷的工作和睡眠循環。不需要定時器。主進程可以「ping」線程以查看它是否仍然有效,以及它是否沒有產生新的線程。根據操作系統的不同,也有類似的技術來確保主流程正在運行。使用像Hibernate這樣的ORM會增加開銷,所以你必須在交易性能和開發的簡易性之間進行權衡。如果你自己將數據轉換爲對象,你將不得不使用一個分析器來查看你是否比ORM更有效地實現它。

+0

Kevin, 感謝您的回覆。 我知道如何創建一個線程並從主進程監視它。我想知道是否還有其他一些使用Java的許多框架的良好模式。 – mitchmcc

+0

只需提供有限的信息就可以回答問題。如果您在問題上提供更多的背景知識,您可能會得到更多答案。這裏描述的簡單輪詢不需要框架。你想從框架中得到什麼?什麼是數據源?一個XML文件?你爲什麼使用SAX?什麼是數據存儲?這是一個提取 - 轉換 - 加載(ETL)過程嗎? –