概述
问题:
在使用quartz做定时任务调度时,遇到的问题:
Handling 7 trigger(s) that missed their scheduled fire-time.
可能原因:
此问题产生的原因就是quartz该启动的任务没有启动起来,就会有这个报错,
网上查找到的三个原因是:
1.所有的woker thread(工作线程; 辅助线程)都在运行其他的job
2.scheduler(调度器)down了
3.任务被安排在过去的某一时刻启动(此可能为代码错误)
排查中发现遇到的问题就是第一个原因,
同时需要注意的是Quartz.properties文件的配置
org.quartz.jobStore.misfireThreshold(毫秒级) :他被认为是在任务到了执行时间还未执行的允许超时时间。之前设置了1,
就会造成只要并发出现,线程不够用,就会出现misfired错误,也就是上面的错误。
org.quartz.threadPool.threadCount:线程池的大小,这个默认是10,可以根据自己的需要取设置。这个决定了并发量的大小。
后续问题:
同时在出现上述“失火”事件后,我们还可以设置救火方案,就是在newTrigger()时,设置withSchedule的策略,
策略目前有
withMisfireHandlingInstructionFireNow:调度器发现misfire情况后,立即执行job。
withMisfireHandlingInstructionNextWithRemainingCount:什么都不做。misfire被忽略了,并且没有后续的执行。
withMisfireHandlingInstructionDoNothing:所有被misfire的执行都被忽略掉,调度器会像平时一样等待下次调度。
等
具体的策略含义可以上网查找一下使用。
但对于只有一次的调度策略来说,失火事件的发生,会造成任务不被执行的错误。
解决方式:
查看日志发现quartz的info信息:
Handling 7 trigger(s) that missed their scheduled fire-time
原因是:系统未设置循环等待时间
org.quartz.jobStore.misfireThreshold(毫秒级)
修复方案:
增加等待时间:
org.quartz.jobStore.misfireThreshold=60000(十分钟)
线程池默认大小10改为20
org.quartz.threadPool.threadCount:20
最后
以上就是寂寞音响为你收集整理的quartz的使用注意事项的全部内容,希望文章能够帮你解决quartz的使用注意事项所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复