我是靠谱客的博主 寂寞音响,最近开发中收集的这篇文章主要介绍quartz的使用注意事项,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题:

在使用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的使用注意事项所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部