quartz触发器失败策略

概念理解

misfire顾名思义, 就是quartz在应该触发trigger的时候未能及时将其触发( 原因可能是线程池没有线程可用 ), 这将导致trigger的下次触发时间落在在当前时间之前, 那么按照正常的quartz调度流程, 该trigger就再没有机会被调度了. 由于一个调度器实例在每次调度过程中都会有一定的睡眠时间, 所以存在一段时间内所有调度器实例都在睡眠, 这也会使trigger不能被及时触发. 因此调度器需要每隔一段时间( 15s ~ 60s )查看一次各个trigger的nextfiretime( 即下次触发的时间 ), 检查出是否有trigger的下次触发时间落在当前时间之前足够长的时间, 在这里系统设定了一个60s的域( misfireThreshold ), 当一个trigger下一次触发时间早于当前时间60s之外, 调度器判定该触发器misfire. 为了在发现触发器misfire之后启动相应的流程恢复trigger至正常的状态, quartz在trigger中可设置相应的策略.

misfire策略

CronTrigger
  • withMisfireHandlingInstructionDoNothing

    不触发立即执行
    等待下次Cron触发频率到达时刻开始按照Cron频率依次执行

    • withMisfireHandlingInstructionIgnoreMisfires

    以错过的第一个频率时间立刻开始执行
    重做错过的所有频率周期后
    当下一次触发频率发生时间大于当前时间后,再按照正常的Cron频率依次执行

    • withMisfireHandlingInstructionFireAndProceed

    以当前时间为触发频率立刻触发一次执行
    然后按照Cron频率依次执行

SimpleTrigger
  • withMisfireHandlingInstructionFireNow

    以当前时间为触发频率立即触发执行
    执行至FinalTIme的剩余周期次数
    以调度或恢复调度的时刻为基准的周期频率,FinalTime根据剩余次数和当前时间计算得到
    调整后的FinalTime会略大于根据starttime计算的到的FinalTime值

  • withMisfireHandlingInstructionIgnoreMisfires

    以错过的第一个频率时间立刻开始执行
    重做错过的所有频率周期
    当下一次触发频率发生时间大于当前时间以后,按照Interval的依次执行剩下的频率
    共执行RepeatCount+1次

  • withMisfireHandlingInstructionNextWithExistingCount

    不触发立即执行
    等待下次触发频率周期时刻,执行至FinalTime的剩余周期次数
    以startTime为基准计算周期频率,并得到FinalTime
    即使中间出现pause,resume以后保持FinalTime时间不变

  • withMisfireHandlingInstructionNowWithExistingCount

    以当前时间为触发频率立即触发执行
    执行至FinalTIme的剩余周期次数
    以调度或恢复调度的时刻为基准的周期频率,FinalTime根据剩余次数和当前时间计算得到
    调整后的FinalTime会略大于根据starttime计算的到的FinalTime值

  • withMisfireHandlingInstructionNextWithRemainingCount

    不触发立即执行
    等待下次触发频率周期时刻,执行至FinalTime的剩余周期次数
    以startTime为基准计算周期频率,并得到FinalTime
    即使中间出现pause,resume以后保持FinalTime时间不变

  • withMisfireHandlingInstructionNowWithRemainingCount

    以当前时间为触发频率立即触发执行
    执行至FinalTIme的剩余周期次数
    以调度或恢复调度的时刻为基准的周期频率,FinalTime根据剩余次数和当前时间计算得到
    调整后的FinalTime会略大于根据starttime计算的到的FinalTime值

  • MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT

    此指令导致trigger忘记原始设置的starttime和repeat-count
    触发器的repeat-count将被设置为剩余的次数
    这样会导致后面无法获得原始设定的starttime和repeat-count值

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值