Java EE 7:设置为persistent = true时获取@Schedule日期

mar*_*lop 5 schedule java-ee

在我的Java EE 7应用程序中,我创建了一个每小时运行一次的持久计划任务.我使用过@Schedule注释.

调用此作业时,我想对从最后一小时到现在发生的事件执行一些操作.为了获得现在,我使用"new Date()".

这个@Schedule的默认持久属性为"true",这很好,因为如果服务器在几个小时内停止,我想在重新启动时执行这些任务.

问题是,如果服务器在5个小时内停止,则作业将启动5次,但在所有执行中,"new Date()"将被执行,结果将是相同的.

是否有任何方法可以检索@Schedule作业应该启动时的日期???

Gab*_*uru 3

有什么方法可以检索 @Schedule 作业应该启动的日期???

我想答案是否定的,不存在。

规范定义了容器必须实现的三个接口。这些接口是:TimerServiceTimerTimerHandle。正如您所看到的,它们中没有一个(特别是 Timer)公开您需要的方法。因此,兼容 Java EE 的服务器不会被迫实现此行为。

也许您应该自己实现一个满足此要求的解决方案。例如,您可以存储最后一个回调方法执行时的时间戳,并使用该时间戳来确定时间段(而不是从当前日期减去 1 小时)

...如果服务器在 5 小时内停止,则作业将启动 5 次...

请注意,您不能依赖于此

18.4.3 定时器到期和超时回调方法 ...任何间隔持久定时器或基于计划的持久定时器在干预时间内到期,必须导致相应的超时回调方法在重新启动时至少被调用一次