2013-07-16 36 views
1

我的代碼中有一個線程清理器,如果超過了DB容量,那麼每次插入數據庫時​​都會檢查容量。我想爲這個清潔程序添加更多的功能,並且當文件數量超過時可以說乾淨,比如說10000個文件。新功能應該按計劃運行。
哪個Java可以同時用於清理數據庫(按需定製)

我希望能夠以兩種方式清潔數據庫:
1.按需提供。
2.預定,每天X小時。

要使用哪個併發java類?
如何確保上述兩種方法使用相同的線程?

回答

3

將執行清理數據庫的代碼應該完全脫離調度(單一責任原則),以便您可以隨時從其他代碼執行它。

至於調度,我建議你看看Quartz scheduler,並熟悉CRON,這樣你就可以將它提取到屬性,以便有可能在不修改代碼的情況下更改調度觸發器。

您應該同步您的代碼,以便同時執行不超過一次的清理操作,使用標準synchronize應該很容易。

如果您希望使其非常簡單並且不想添加新的依賴關係,那麼您可以使用標準的Java解決方案:Timer。 Timer#scheduleAtFixedRate可以提供固定利率執行。這意味着只要有新的需求出現,您就必須添加額外的代碼(例如,不要在週末安排)。

+0

感謝您的意見。 – Snow

+0

只是爲了澄清,我的代碼中有一個線程清理器,如果超過了DB容量,那麼將在每次插入到DB時檢查容量。我想爲這個清潔程序添加更多的功能,並且當文件數量超過時可以說乾淨,比如說10000個文件。新功能應該按計劃運行。 – Snow

+0

那麼你可以有不同的策略來檢查容量超過,文件數量超過等等。你可以映射到適當的清理策略。根據您的應用程序加載情況,您可能需要在工作日內每小時運行一次。我不確定每個插入內容是否正確運行。如果他們不使用共享資源,您可以分別安排每個策略。或者你可以這樣做,所以兩個不同的清理程序不會同時運行,因此應用程序不會獲得高CPU。 –