問題發生環境:
1.通過繼承job執行quartz任務
2.大概有30多個quartz任務
問題發生現象:
1.所有任務日誌均無輸出,似乎都停止了
問題發生原因:
1.這30多個任務中,有乙個任務【job-1】在執行時處理過慢,發生了阻塞。
2.因為是通過繼承job執行quartz任務,到了設定的時間間隔後,【job-1】在上次還沒有執行完的情況下,再次執行。
3.由於【job-1】的阻塞,quartz的執行緒池(預設10個)被耗盡。
4.quartz沒有多餘的執行緒來執行新的任務
問題分析工具:
通過jmc.exe或者jvisualvm.exe檢視當前執行緒dump,會發現quartz相關所有的執行緒都阻塞在【job-1】裡
問題解決方案:
1.對於同乙個任務,實行同步制,也就是說,在上次還沒執行完的情況下,不能再次執行。
2.@disallowconcurrentexecution 或者 statefuljob 或者 自己實現相關同步機制
關於Quartz定時任務的使用
使用場景 不同的學校,都有乙個或多個多個負責人需要接收到教師早上到校的記錄。不同學校的接收時間不相同,可以靈活配置。以上使用場景,簡單的timer定時器也可以滿足程式的需求。自己寫乙個定時任務的連線池,記錄對應時間的觸發,傳入引數,執行程式時需要知道是哪個學校觸發的執行。以上的使用場景,有現成的輪子...
關於QUARTZ有狀態任務全面解析
size medium 前端時間由於工作需要研究了下quartz這個排程器,在網上看了蠻多的資料,其中說的最少最不明白的就是關於quartz的有狀態和無狀態的 job,quartz是怎麼處理的,們基本上都是說有狀態的job時,當這次任務沒有完成,而下次觸發的時間又來了時,都認為是掛起,等待,要考慮很...
quartz使用(二)任務的刪除,停止,暫停,啟動
這一篇介紹關於任務的啟動停止這些操作,廢話不多說。任務啟動停止 啟動任務 void start throws schedulerexception 啟動任務停止任務 void shutdown throws schedulerexception 直接關閉scheduler void shutdown...