首页 > 解决方案 > 石英 Cron 失火

问题描述

我是新的 Quartz 调度器,遇到了一些麻烦。

当我使用简单的调度程序如下:

Trigger misFiredTriggerB = TriggerBuilder.newTrigger().startAt(DateUtils.addSeconds(new Date(), -63)).withSchedule(SimpleScheduleBuilder.simpleSchedule().withMisfireHandlingInstructionFireNow()).build();

它工作正常,根据情况考虑失火阈值和失火指令。

但是,当我使用 cron 调度程序并使用当前时间前几秒的时间时,它既不考虑阈值也不考虑失火指令。

Trigger misFiredTriggerA =  TriggerBuilder.newTrigger().withIdentity("SimpleTrigger").withSchedule(CronScheduleBuilder.cronSchedule("30,35,38 50 17 * * ?").withMisfireHandlingInstructionFireAndProceed()).build();

cron有什么我做错了吗?

另一个问题是如何轻松更改 Eclipse 中的失火阈值,因为默认情况下它设置为 60000?

先感谢您。

标签: cronquartz-schedulerschedulermisfire-instruction

解决方案


Simple 触发器和 Cron 触发器之间存在差异。

  • 简单触发器的执行安排在现在之前或之后的确切日期。在您的情况下,现在已经超过 60 秒(属性org.quartz.jobStore.misfireThreshold(以毫秒为单位)),因此 Quartz 假定此类触发器为误触发。
  • Quartz 使用Cron Trigger来安排在未来最近的日期执行,该日期尊重 cron 表达式。因此,在您的情况下,工作将于明天 17:50:30 触发

推荐阅读