0

我有一份每小时运行第一分钟的工作。

作业将获取当前时间并查询数据库以查看该小时要发送的任何通知,如果有,它将发送电子邮件通知。

现在的问题是处理失火。

说当调度程序在上午 8:30 到 10:30 之间关闭时,我错过了 2 个触发器。当调度程序在 10:30 出现时,我需要这 2 个错过的触发器才能被触发。所以我正在使用带有 MisfireHandlingInstructionIgnoreMisfires 触发器的石英。

由于我的工作具有根据当天当前时间进行查询的逻辑,因此两个失火触发器都将查询仅在上午 10 点发送的通知(而不是上午 8 点和上午 9 点)

我将如何处理这种情况?

石英是否有检查工作内部的失火计数?

感谢你的帮助 !!

4

1 回答 1

3

在您的情况下,您应该获得预定日期,而不是依赖当前系统日期:

void execute(JobExecutionContext context) {
    context.getScheduledFireTime()
    //...
}

通常,当前系统时间应该非常接近预定的触发时间。但是在失火情况下或在重负荷下,预定的火灾时间比当前时间早得多(我们会遇到延迟)。

准确地说,在您的情况下,在 10:30,作业将触发两次,getScheduledFireTime()并将返回 9:00 和 10:00。

于 2012-07-11T21:14:43.860 回答