quartz對任務超時和misfire的處理,啟動時多執行一次


目前有一個按月累計折舊的定時任務,測試環境要配合業務測試,所以手工先停服務器,修改Linux系統時間,再啟動服務器,但是出現問題,啟動的時候有時候多執行一次,定凌晨5點定時啟動,我修改時間為4點55,  56的時候服務器起來,執行了一次定時任務,5點准時又執行了一次,而且這個是不定時出現的,一晚測試30次,出現了5次多跑的情況,

 

現象和這個帖子相似   https://www.iteye.com/blog/kanbol-1160826

  quartz有個全局的參數misfireThreshold設置可以允許的超時時間,超過了就不執行,未超過就執行。
  比如設置了misfireThreshold=30分鍾,如果一個任務定時在10:30執行,但在10:29服務器掛了,在10:50啟動,雖然任務超時了21分鍾,但小於misfireThreshold,所以還是可以執行。而如果服務器11:10才啟動,那就misfire了。

  對於周期性的任務,如果有misfire的情況出現,則會自動更新CronTrigger的時間周期
  默認情況下會在當前時間馬上執行前一個被misfire的任務
  而如果設置MISFIRE_INSTRUCTION_DO_NOTHING,則不對misfire的任務做特殊處理,只從當前時間之后的下一次正常調度時間開始執行

 

查了一下我們配置的misfireThreshold是60秒,不應該出現這個情況,而且我們沒有延遲執行任務,

 

最后結局方案就是把這個misfireThreshold改成0了,另外測試的時候重啟服務時先修改時間,然后等幾分鍾再重啟,基本上沒有遇到這個問題

quartz 2.4 已不支持  misfireThreshold=0 了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM