主題:預定作業任務
我想實現一個基本的作業調度在Java中處理經常堅持計劃任務(用於個人學習計劃)。我不想使用Quartz/Obsidian/Cron4J /等任何(隨時可用)庫。
目的:
- 工作必須是持久的(處理服務器關閉)
- 作業執行時間可能需要長達2-5〜MN。
- 管理大量工作
- 多線程
- 輕快的;)
所有我的工作是在一個MySQL數據庫。
JOB_TABLE (id, name, nextExecution,lastExecution, status(IDLE,PENDING,RUNNING))
一步一步:
從「
JOB_TABLE
」,其中「nextExecution > now」 AND 「status = IDLE「
檢索每個作業。該步驟每10mn由一個線程執行。對於檢索的每個作業,我在
ThreadPoolExecutor
中放入一個新線程,然後在我的「JOB_TABLE
」中將作業狀態更新爲「PENDING
」。作業線程正在運行時,我將作業狀態更新爲「
RUNNING
」。當工作結束時,我更新
lastExecution
與當前的時間,我設定一個新的nextExecution
時間,我換了工作狀態爲「IDLE
」。
當服務器啓動時,我將每個PENDING/RUNNING作業放在ThreadPoolExecutor
中。
問題/觀察:
- 第2步:請問ThreadPoolExecutor的處理大量的線程(約20000)?
- 我應該使用NoSQL解決方案而不是MySQL嗎?
- 這是處理這種用例的最佳解決方案嗎?
這是一個草稿,沒有代碼背後。我願意提出建議,評論和批評!
「我不希望使用任何(即用型)庫的石英/黑曜石/ Cron4J的/ etc」 - 爲什麼不呢? –
因爲這是一個研究項目,以提高我的Java知名度! ;) – user3350705Ol
它然後分析這些庫的代碼。那麼你可以學到的不僅僅是重新發明輪子。 –