我正在使用 quart 库在 java 中进行调度。我写了一个这样的触发器
trigger = newTrigger().withIdentity("myTrigger", "myGroup").startNow() .withSchedule(cronSchedule(croneExpression).withMisfireHandlingInstructionFireAndProceed()) .forJob("myJob","myGroup") .build();
现在,当我使用 cronexpression 设置调度程序时,动态生成的调度程序可以正常运行。但是,当服务器在调度程序设置为触发期间关闭时,quartz_trigger中的值(即表中的next_fire_time)会在作业执行时间后更改。因此,调度程序的失火不起作用。所以我的目的没有解决。那么问题出在哪里呢?是否要设置quartz.properties 中的任何属性。我没有使用 job.xml(jobInitializer) 来设置调度程序。
最佳答案
the values in quartz_trigger i.e. the next_fire_time in table is changed after the execution >time of the job
是的,这实际上是 quartz 在失火时所做的事情。
根据创建触发器时提供的失火指令,quartz 计算必须执行失火执行的次数。 根据您的代码,您已将失火指令设置为“fireAndProceed”,因此 Quartz 仅执行第一个失火执行(并忽略所有后续剩余的失火)。例如:如果您将触发器设置为在下午 2:29 到下午 4 点之间触发,间隔为 30 分钟,并且调度程序在下午 2:29 到下午 3.29 期间关闭,则只有一个触发器在下午 2.30 执行 将被执行(下午 3 点的执行将被忽略)。
希望这能回答您的问题。 :-)
关于java - 关于quartz-scheduler中的失火,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16983218/