【问题标题】:Quartz Scheduler - Ignore misfired job - withMisfireHandlingInstructionDoNothing() not workingQuartz Scheduler - 忽略失败的工作 - withMisfireHandlingInstructionDoNothing() 不工作
【发布时间】:2020-11-25 19:59:25
【问题描述】:

我想忽略任何失败的作业(比如服务关闭时),然后等到下一个计划。

为此,我尝试了以下方法:

TriggerBuilder.newTrigger().withIdentity(jobName, jobGroup)
            .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)
                      .withMisfireHandlingInstructionDoNothing())
            .withPriority(jobPriority).build();

此作业每周二每周触发一次。假设在一个星期二,服务停止了,星期五又恢复了。那么作业应该在下周二触发,而不是在服务启动时触发。

但上面的代码不起作用。服务启动后立即触发作业。

注意:我手动转发时间来测试这个。(如果这有什么不同)

【问题讨论】:

    标签: java quartz-scheduler jobs


    【解决方案1】:

    我想我明白了。

    要让MisfireHandlingInstruction生效,延迟应该大于设置的值

    org.quartz.jobStore.misfireThreshold = 600000

    否则石英永远不会将触发器视为失火。所以失火指令不会生效。

    来自here

    在深入了解细节之前,还有一个配置选项需要说明。它是 org.quartz.jobStore.misfireThreshold(以毫秒为单位),默认为 60000(一分钟)。它定义了触发器应该在多长时间后才被视为失火。使用默认设置,如果假设触发器在 30 秒前被触发,Quartz 会很高兴地运行它。这种延迟不被认为是失火。但是,如果在预定时间后 61 秒发现触发器 - 特殊的失火处理程序线程会处理它,遵守失火指令。出于测试目的,我们将此参数设置为 1000(1 秒),以便我们可以快速测试失火。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多