![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Quartz相关
文章平均质量分 74
卷福。
这个作者很懒,什么都没留下…
展开
-
Quartz 任务延迟执行了为什么不算misfire
misfire阈值1.背景2.misfire阈值2.1misfireThreshold2.2作为nextFireTime的下界生效2.3作为nextFireTime的上界生效3.总结1.背景在使用quartz时有时候会发现任务并不是准时执行的,而是有一些延迟,但是为什么不算是misfire呢2.misfire阈值在Quartz执行逻辑(六)misfire的处理中说了Misfire的处理是由JobStoreSupport中的一个线程MisfireHandler来处理的,此外在JobStoreSuppo原创 2021-04-27 17:32:51 · 724 阅读 · 0 评论 -
Quartz Cron类型触发器的misfire策略
Quartz Cron类型触发器的misfire策略1.背景2.cron类型触发器的misfire策略及处理方式2.1 IgnoreMisfire2.2 DoNothing2.3 FireNow1.背景关于misfire策略的设置在Simple类型触发器的misfire策略中已经说明了触发器的misfire策略应该如何设置,本篇介绍一下cron类型的触发器的misfire策略的种类及其处理方式2.cron类型触发器的misfire策略及处理方式2.1 IgnoreMisfire该方法设置misf原创 2021-04-27 13:49:17 · 889 阅读 · 0 评论 -
Quartz Simple类型触发器的misfire策略
Simple类型触发器的misfire策略1.背景2.misfire策略的设置及处理方式2.1IgnoreMisfire2.2 FireNow2.3NextWithExistingCount2.4NextWithRemainingCount2.5 NowWithExistingCount2.6 NowWithRemainingCount3.总结1.背景在Quartz执行逻辑(六)misfire的处理中介绍了quartz关于misfire处理的逻辑。在该篇中我们提到了关于misfire的处理策略是可以设置原创 2021-04-27 11:55:09 · 1183 阅读 · 0 评论 -
Quartz 暂停后恢复任务,任务如何不会被misfire处理
暂停后恢复任务如何忽略misfire1.背景2.处理方法1.背景任务如果在暂停期间有本该触发的情况,但是由于被暂停了没有触发,那么在任务恢复的时候就会被检测到它misfire了。此时MisfireHandler线程就会根据添加任务时的misfire策略去处理它。但是如果想要忽略这种misfire的情况该怎么做呢,人为的暂停不算是misfire,遇到宕机,断电这种情况才算。2.处理方法在Quartz执行逻辑(七)任务的暂停和恢复中说到了,在resumeTrigger方法中如果nextFireTime小原创 2021-04-21 14:27:10 · 864 阅读 · 0 评论 -
Quartz执行逻辑(七)任务的暂停和恢复
Quartz执行逻辑(七)任务的暂停和恢复1.简介2.暂停与恢复任务2.1暂停任务2.2恢复任务1.简介前面在Quartz执行逻辑(一)中说到trigger的状态是WAITING的,会在目标时间被触发,所以暂停与恢复任务自然是修改了trigger的状态。2.暂停与恢复任务2.1暂停任务暂停任务时通过调用Scheduler的pauseJob方法来实现这个操作。这个方法一直向下调用到了JobStoreSupport中的pauseJob方法。该方法中是对任务的trigger进行操作的,也证实了前面的猜想原创 2021-04-21 10:45:42 · 7025 阅读 · 0 评论 -
Quartz执行逻辑(六)Misfire的处理
Quartz执行逻辑(六)Misfire的处理背景Quartz的misfire机制背景Quartz框架在执行任务中可能会由于停电,宕机等原因,有一段没有去调度任务,但是有些任务可能刚好应该在这个时间内执行,此时就会出现在本该执行的时间没有执行的情况。这种情况就叫做misfire了。Quartz的misfire机制为了解决这个问题,Quartz框架也是做出了应对,它提供了多种可选的misfire处理策略,在添加任务时就可以配置,之后在任务misfire时就会根据配置的策略去处理。Quartz在Job原创 2021-04-19 18:34:59 · 2272 阅读 · 0 评论 -
Quartz执行逻辑(一)QuartzSchedulerThread介绍,quartz执行流程简介
1.背景入职以来负责定时调度相关的业务,其底层用的是quartz框架。趁着最近有时间来总结一下quartz的相关逻辑。本篇就先简述一下quartz的执行逻辑。2.执行逻辑叙述quartz是通过一个调度线程不断的扫描数据库中的数据来获取到那些已经到点要触发的任务,然后调度执行它的。这个线程就是QuartzSchedulerThread类。其run方法中就是quartz的调度逻辑。2.1获取触发器(Triggers)run方法中首先会判断quartz框架的线程池是否有可用的线程且没有被暂停,原创 2021-04-12 11:46:09 · 5577 阅读 · 1 评论 -
Quartz执行逻辑(五)misfire情况下虽然job class not found但是任务仍然一直执行
1.介绍前面在Quartz执行逻辑(四)中说到任务在执行时如果获取job信息时抛了class not found的异常则Quartz会把trigger的状态置为ERROR,而状态为ERROR的trigger是不会被触发的。所以可以给这个异常加日志打印帮助排查信息,但是在misfire的时候,虽然这个class not found的日志打印了,但是任务好像还是可以执行,没有状态被置为ERROR的迹象。2.misfire处理过程中job class not found所谓misfire就是一个tr.原创 2021-04-14 15:04:46 · 720 阅读 · 0 评论 -
Quartz执行逻辑(四)触发器状态变成error,任务不执行
1.介绍原创 2021-04-14 11:21:52 · 5410 阅读 · 6 评论 -
Quartz执行逻辑(三)QRTZ_FIRED_TRIGGERS表的作用
1.介绍在Quartz执行逻辑(一)中介绍到的操作基本都是对QRTZ_TRIGGERS表进行的,该表存的是job对应的触发器的记录。本篇介绍一下QRTZ_FIRED_TRIGGERS表在Quartz执行中的作用。2.向QRTZ_FIRED_TRIGGERS表的时机在Quartz执行逻辑(一)中说到了,Quartz框架有一个单独的线程去扫描QRTZ_TRIGGERS表,去获取那些将要到nextFireTime的triggers的记录。在获取到之后,要把这些记录中的部分信息插入到QRTZ_FIRED原创 2021-04-13 19:53:50 · 11171 阅读 · 3 评论 -
Quartz执行逻辑(二)触发器状态的变更
1.获取trigger执行时首先要获取到那些将要触发的触发器,会有一个调度线程去查找QRTZ_TRIGGERS表中状态为WAITING的trigger。获取到的trigger的状态会被置为acquired。2.触发trigger获取到的将要触发的trigger的nextFireTime和当前时间十分接近时,quartz此时会去把acquired改变为executing。如果不允许job并发执行的,此时还会把当前QRTZ_TRIGGERS表中状态为WAITING,ACQUIRED,PAUSED的改原创 2021-04-12 15:13:30 · 4092 阅读 · 0 评论