在項目運行時,發現Job會有不定期丟失的情況。經過不斷的排查和翻源碼找到是CronTrigger 觸發器的超時策略設置的問題。
修改方式如下:
將超時策略由MISFIRE_INSTRUCTION_DO_NOTHING 改爲MISFIRE_INSTRUCTION_FIRE_ONCE_NOW,問題得到解決。
在用Mysql做分佈式任務時,查看job的超時策略的方式:
1.打開qrz_triggers表,找到MISFIRE_INSTR字段。
2.trigger_type爲CRON且MISFIRE_INSTR爲1,表明超時策略爲MISFIRE_INSTRUCTION_FIRE_ONCE_NOW。
3.trigger_type爲CRON且MISFIRE_INSTR爲2,表明超時策略爲MISFIRE_INSTRUCTION_DO_NOTHING 。
博客比較簡單,並沒有詳細介紹quartz的分佈式任務實現方式,但是找到了問題所在。如有問題,請留言溝通。
ps:
參考文檔: 1.超時策略詳細的介紹:https://www.cnblogs.com/daxin/p/3919927.html
2.最全Quartz系統參數配置詳解: https://blog.csdn.net/zixiao217/article/details/53091812