Spring 3:任务命名空间:如何找出下次执行的时间?

时间:2010-04-30 13:39:49

标签: java spring quartz-scheduler

我有一个bean,它在上下文配置中使用<task:scheduled>按计划执行了一个方法。

有没有办法让我在执行该方法时找到下一次计划运行的时间?

同样的方法也是手动执行的,接收调度程序信息的机制可能不会破坏调度程序外部的执行...

2 个答案:

答案 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;
    }
}