我观察到,通常在午夜排定的作业(但由于服务器进入节能模式而无法执行)是在服务器走出节能模式后执行的。这会导致意外的执行时间。
有没有办法告诉Quartz在作业离目标时间太远之后不要执行作业?
发布于 2017-02-15 14:52:19
是。你只需要告诉夸兹该怎么处理工作失火
触发器的另一个重要属性是它的“失火指令”。如果持久触发器由于调度程序被关闭而“错过”其触发时间,或者由于Quartz的线程池中没有用于执行作业的可用线程,则会发生错误触发。不同的触发器类型有不同的错误指令可供他们使用。默认情况下,它们使用“智能策略”指令--它具有基于触发器类型和配置的动态行为。当调度程序启动时,它会搜索任何未触发的持久触发器,然后根据它们各自配置的失火指令更新每个触发器。当您开始在您自己的项目中使用Quartz时,您应该熟悉在给定触发器类型上定义并在其JavaDoc中解释的错误指令。
具体的错误指令取决于您使用的Trigger类型。对于日常工作来说,可能是这样的:
trigger = newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(dailyAtHourAndMinute(0,0)
.withMisfireHandlingInstructionDoNothing()) // set misfire instruction
.build();但是,这同样取决于触发器的类型。只需使用您的IDE来查看哪些withMisfire*()方法可用,并使用withMisfireHandlingInstructionDoNothing或withMisfireHandlingInstructionNextWithRemainingCount (两者都将忽略未执行的执行,并等待下一个预定的执行)。
当我不得不了解不同类型的错误指令时,除了Quartz的教程和API文档之外,我还使用了这个博客条目。
https://stackoverflow.com/questions/42246869
复制相似问题