使用Quartz 2.3.0
标题要求:
是否可以通过Job.execute(JobExecutionContext context)
方法获取或计算Quartz触发器的先前计划的触发时间?
我知道我可以使用JobExecutionContext.getScheduledFireTime()
来获取当前触发该触发器的计划时间,但是我想要 previous 触发的计划时间。换一种说法:getFireTime()
是getScheduledFireTime()
就像getPreviousFireTime()
是什么?
我正在使用JobStoreTX
,需要保持数据库不可知;覆盖所有JDBC委托和Job Store实现来存储和公开先前计划的启动时间是非常痛苦的。
最接近的是某些Trigger
实现(例如SimpleTriggerImpl
)具有方法:
/**
* <p>
* Returns the last time at which the <code>SimpleTrigger</code> will
* fire, before the given time. If the trigger will not fire before the
* given time, <code>null</code> will be returned.
* </p>
*/
public Date getFireTimeBefore(Date end);
但是CronTriggerImpl
有:
/**
* NOT YET IMPLEMENTED: Returns the time before the given time
* that this <code>CronTrigger</code> will fire.
*/
protected Date getTimeBefore(Date eTime) {
return (cronEx == null) ? null : cronEx.getTimeBefore(eTime);
}
不幸的是,我将主要使用CronTrigger
,并且Trigger
界面中没有这样的方法。
有什么想法吗?
谢谢。
我的备份想法是,在每次作业执行开始时,从一个单独的表中以事务方式读取先前的计划时间,并将新的当前计划时间写入到由SchedulerName,TriggerGroup和TriggerName索引的表中。
答案 0 :(得分:0)