quartz當機器掛掉重啓後定時任務後執行的策略

quartz,java世界裏面的任務管理容器。

至於爲什麼會有misfire這個概念,我想可以重這三個方面來進行說明:

1 所有的線程都在忙於更高優先級的任務

2 任務本身CRASH了

3 代碼的BUG,導置錯誤的設置了JOB

基於這3種原因,其實也是現實世界中的常理。沒有任何事情,都能保證100%運行OK。quartz提出了misfire的理論,讓任務在錯過之後,還能正常的運行。

以下分別對幾種類型的JOB進行說明:

without repeating(不重複的JOB)

這裏只列出有代表的屬性進行說明,這個JOB執行的時間爲過去10秒之前,所以肯定會觸發misfire

withMisfireHandlingInstructionFireNow(失效之後再恢復並馬上執行)

就是當某個任務在理論執行的時間點沒有執行,當任務正常起來之後,馬上就去執行剛纔未執行的任務。

withMisfireHandlingInstructionNextWithRemainingCount(失效之後不處理)

錯過之後,不用管。

其它詳細說明

這個其實比較簡單。來看第二種

repeating fixed number of times(多次執行)

這個任務是說從9點開始,每隔一個小時,會執行一次,直到下午4點.

withMisfireHandlingInstructionFireNow(失效之後,再啓動馬上執行,總次數還是7次)

如果任務在10點的時候沒有觸發,但是在10:15分的時候執行了misfire,以後每次正點執行的時間就會較初始值晚15分鐘,直到16:15

withMisfireHandlingInstructionNowWithExistingCount(失效之後,再啓動之後馬上執行,但是起始次數清零,總次數=7+當前misfire執行次數-1)

如果任務在10點沒有觸發,10:15分執行了misfire,以後執行時間都會較初始值晚15分鐘,但是執行次數還是原來的7次,就會到17:15了。

withMisfireHandlingInstructionNextWithRemainingCount(失效之後,不管donothing,總次數還是7次)

withMisfireHandlingInstructionNextWithExistingCount(失效之後,donothgin,總次數=misfire的次數+7)

詳情如圖:

repeating infinitely(不停的執行)

這個任務是說從9點開始,每隔一個小時就會執行。

withMisfireHandlingInstructionFireNow(每次失效之後,在下個失效節點再執行)

這個模式下,withMisfireHandlingInstructionNowWithRemainingCount ,withMisfireHandlingInstructionNowWithExistingCount都是 一個意思。

withMisfireHandlingInstructionNextWithRemainingCount(每次失效之後,在下個定義的時間點再執行)

這個同withMisfireHandlingInstructionNextWithExistingCount的配置

CRON triggers(表達式,最複雜的)

在每個星期的週一至週五的上午9點到下午17點,每隔一個小時執行一次。

withMisfireHandlingInstructionIgnoreMisfires(所有misfire的任務會馬上執行)

打個比方,如果9點misfire了,在10:15系統恢復之後,9點,10點的misfire會馬上執行

withMisfireHandlingInstructionDoNothing(所有的misfire不管,執行下一個週期的任務)

withMisfireHandlingInstructionFireAndProceed(會合並部分的misfire,正常執行下一個週期的任務)

假設9,10的任務都misfire了,系統在10:15分起來了。只會執行一次misfire,下次正點執行。

現在,你瞭解到,不同模式的相同配置,misfire的行爲其實是不一樣的。大的方向其實就三個

1 忽略

2 立即執行

3 繼續

4 放棄

5 等待下一個週期

最終就是根據合適的策略,選擇合適的misfire.

作者:igool 鏈接:http://www.jianshu.com/p/634d2a6fae7b 來源:簡書 著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
發佈了72 篇原創文章 · 獲贊 51 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章