關於QUARTZ有狀態任務全面解析

2021-08-30 18:52:11 字數 643 閱讀 4054

[size=medium]前端時間由於工作需要研究了下quartz這個排程器,在網上看了蠻多的資料,其中說的最少最不明白的就是關於quartz的有狀態和無狀態的 job,quartz是怎麼處理的,網友們基本上都是說有狀態的job時,當這次任務沒有完成,而下次觸發的時間又來了時,都認為是掛起,等待,要考慮很複雜的情況,本人看了quartz的原始碼的實現方案,現將quartz的實現機制描述如下:

quartz的有狀態的job始終只有乙個任務在執行,不會出現同乙個job併發的情況,quartz執行乙個job時,會判斷該job是不是有狀態的,如果是有狀態的,則把給job從儲存job的列表中移除,儲存到另乙個集合裡,當然要修改該job的狀態,等到該job執行完成時,再把該job從集合裡刪除,重新加入到job列表中,這樣的話,quartz就不怕由於這個job執行太長的時間,而導致下次執行時間到達時又觸發了該job,因為該job已經不在job列表[b][/b]中了,找不到觸發器對應的job,只能返回空的job ,就直接返回了。不會出現任何的等待掛起問題。假如說乙個job執行了執行的時間很長,而錯過了n次觸發,側等到該job執行完,則下次觸發的時間是(n+1)*每次觸發的時間。

至於怎麼實現有狀態的job就不在這裡說了,哈哈

寫下這個也因為自己在之前也找了好多資料,都說的很模糊,希望能繫結需要用quartz的朋友。[/size]

Quartz 有狀態的JobDataMap

quartz,每次執行job,job永遠是全新的物件,但是,如果job實現org.quartz.statefuljob介面,而不是job介面.此時jobdetail的jobdatamap將會共享乙個物件。注意 當實現有狀態介面,statefuljob時,只有jobdetail的jobdatamap是...

檢視Quartz 排程任務 job 的狀態

首先 明確一點什麼是 jobkey jobkey jobkey new jobkey name,group jobkey相當於一把鑰匙連線 所有從 schedule 中 獲取 資訊的鑰匙 如果想獲取 初始化資訊 則scheduler.getjobdetail jobkey getjobdatamap...

關於Quartz定時任務的使用

使用場景 不同的學校,都有乙個或多個多個負責人需要接收到教師早上到校的記錄。不同學校的接收時間不相同,可以靈活配置。以上使用場景,簡單的timer定時器也可以滿足程式的需求。自己寫乙個定時任務的連線池,記錄對應時間的觸發,傳入引數,執行程式時需要知道是哪個學校觸發的執行。以上的使用場景,有現成的輪子...