我有一个bean,它在上下文配置中使用<task:scheduled>
按计划执行了一个方法。
有没有办法让我在执行该方法时找到下一次计划运行的时间?
同样的方法也是手动执行的,接收调度程序信息的机制可能不会破坏调度程序外部的执行...
答案 0 :(得分:2)
<task:scheduled>
配置样式是生成调度程序和日程表的基础Spring工厂bean的便捷快捷方式。为方便起见,它很有用,但不如直接使用底层调度工厂那么灵活。
话虽如此,调度程序本身需要通过其API公开“下次触发时间”信息,并且这依赖于实现。例如,我没有看到从标准ScheduledExecutorService
实现中获取此信息的方法。
Quartz, 通过getNextFireTime()
类上的Trigger
方法公开了这个。
如果您愿意放弃<task:scheduled>
和use the Quartz-Spring integration directly,那么您可以访问Trigger
(或TriggerBean
)并获得您想要的内容。
答案 1 :(得分:2)
对于那些不使用石英但弹簧的人,我通过扩展CronTrigger并记住nextExecutionTime来实现下一个执行时间:
import org.springframework.scheduling.support.CronTrigger;
public class MyCronTrigger extends CronTrigger {
public MyCronTrigger(String expression) {
super(expression);
}
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
Date date = super.nextExecutionTime(triggerContext);
nextExecutionTime = new Date(date.getTime()); //remember
return date;
}
}