quartz scheduler-ignore misfired job-withmisfirehandlinginstructiondonothing()不工作

mcvgt66p  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(349)

我想忽略任何失败的工作(比如说当服务停止时),只需等到下一个时间表。
为此,我尝试了以下方法:

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

这项工作每星期二开始。比如说在一个星期二,服务中断了,星期五又恢复了。那么这个作业应该在下周二触发,而不是在服务出现时触发。
但是上面的代码不起作用。一旦服务启动,就会触发作业。
注意:我正在手动转发测试时间。(如果这有什么不同的话)

vnjpjtjt

vnjpjtjt1#

我想我明白了。
要使缺火处理指令生效,延迟应大于
org.quartz.jobstore.misfirestreshold=600000个
否则石英从不把触发器当作失火。所以失火指令不会生效。
从这里开始
在深入讨论细节之前,还有一个配置选项需要说明。它是org.quartz.jobstore.misfirestreshold(毫秒),默认为60000(一分钟)。它定义了触发器的误触发时间。在默认设置下,如果触发器应该在30秒前触发,quartz会很高兴地运行它。这种延迟不被视为失火。但是,如果在计划时间后61秒发现触发器,则特殊的缺火处理程序线程将按照缺火指令处理它。出于测试目的,我们将此参数设置为1000(1秒),以便快速测试缺火。

相关问题