我的工作每小时运行一分钟。
作业将获得当前时间和查询数据库以查看此时间内要发送的任何通知,如果有,它将发送电子邮件通知。
现在问题在于处理失火。
当调度程序在上午8:30到10:30之间停机时,我错过了2个触发器。 当调度程序在10:30出现时,我需要这两个错过的触发器才能被解雇。所以我使用quartz withMisfireHandlingInstructionIgnoreMisfires触发器。
由于我的作业具有基于当天当前小时查询的逻辑,因此两个失火触发器将查询仅在上午10点发送的通知(不是上午8点和上午9点)
我将如何处理这种情况?
石英有没有检查工作中的失火计数?
感谢您的帮助!!
答案 0 :(得分:3)
在您的情况下,您应该获得预定日期,而不是依赖当前系统日期:
void execute(JobExecutionContext context) {
context.getScheduledFireTime()
//...
}
通常,当前系统时间应非常接近计划的开火时间。但是在失火情况下或在重载下预定的射击时间是在当前时间之前(我们经历延迟)。
准确地说,在你的情况下,在10:30,工作将触发两次,getScheduledFireTime()
将返回9:00和10:00。