我想获取作业应该执行的时间和最近执行的实际执行时间之间的延迟。例如,如果一个作业应该在晚上 8 点解雇,但实际上是在晚上 8 点 10 分解雇,那么结果应该是 10 分钟。
我知道我可以使用 Trigger.getPreviousFireTime() 来获取它最后一次 actually 执行的时间,但是我看不到任何方法来获取相应的计划时间(例如上面的示例中的晚上 8 点),是这样吗可能吗?
在您的工作中使用以下代码:
@Override
public void execute(final JobExecutionContext context) {
long diffInMillis =
new Date().getTime() - context.getScheduledFireTime().getTime();
//...
}
正如您可能猜到的那样,
context.getScheduledFireTime()
是作业应该运行的时间(理想情况下差异应接近 0)。
请注意,如果您的作业迟到超过 10 分钟(可配置),它可能根本不会触发 - 这取决于您设置的失火指令。
我不知道最近的执行情况,但您可以使用
JobExecutionContext
明确了解当前执行情况,如@Tomasz 上面所述,而且 API 现在还提供 context.getFireTime()
方法,以避免输入后的开销execute
方法并运行减去差值的行。
所以你的代码现在看起来像这样:
@Override
public void execute(final JobExecutionContext context) {
//... other (possibly time-consuming) commands
long actualToScheduledTimeDiffInMillis=
context.getFireTime().getTime() - context.getScheduledFireTime().getTime();
//... the rest of your code
}