Quartz框架中MisFire的理解
如各位希望转载或引用,请注明出处,尊重原创,谢谢。如有疑问或错误,欢迎邮件沟通。
gitHub地址:https://github.com/thinkingfioa
邮箱地址:thinking_fioa@163.com
博客地址: https://blog.youkuaiyun.com/thinking_fioa
本文重点
Quartz框架是Java生态下非常著名的定时任务框架,包括Spring中的诸多定时任务也是依赖于Quartz框架实现的。
本文重点讲解:Quartz框架中的MisFire怎么理解,还有MissFire后的补偿机制。网上非常多的博客,完全在照搬照翻英文文档,没有任何自己的理解,没有任何参考意义。都在搬运垃圾,强烈鄙视。
1. 背景
Quartz框架是Java生态中的一套非常优秀的定时任务框架,使用Quartz框架时,需要注意Quartz强烈依赖主机时间。主机时间的任何飘动,可能导致Quartz定时任务的非预期执行或不执行。
任何定时框架,都可能存在MisFire的现象。何为MisFire,就是:周期性任务A需要在某个规定的时间执行,但是由于某种原因导致任务A未执行,称为MisFire。
Quartz常常由于下列几种情况导致任务的MisFire:
-
Quartz的线程数较少,周期性任务较多且执行时间较长,导致某个时间点需要执行周期性任务A未被CPU调度到,导致MisFire。
-
将本地时间往后调整,直接跨过了周期性任务A,周期性任务A也被MisFire。
-
设置过去的时间为开始执行时间。例如当前时间是9:00:00,指定开始时间为7:00:00
如何设定任务的MisFire和MisFire后的补偿机制非常重要,对于改点官方文档描述较为模糊,网上一大批直接翻译官方文档的博客更是说的云里

本文深入探讨了Quartz框架中的MisFire现象及其补偿机制。详细解释了MisFire的判定标准和三种常见处理策略,通过具体案例帮助读者理解如何正确配置避免非预期行为。
最低0.47元/天 解锁文章
3303





