Java:Quartz调度程序-有什么方法可以让我执行计划作业的下五次运行

时间:2019-06-04 20:48:56

标签: java spring-boot quartz

是否有任何API可以提供cron表达式的下n次运行。

3 个答案:

答案 0 :(得分:1)

使用触发器(org.quartz.Trigger)调度石英作业。触发器接口公开了两个有用的方法:

Date getNextFireTime();
Date getFireTimeAfter(Date afterTime);

因此,请扣动扳机,致电getNextFireTime()。现在您知道接下来什么时候触发。然后呼叫getFireTimeAfter( next )并在下一次触发时间传递它。重复此操作,直到您有足够的运行时间来满足用例为止。

因此,对于五次运行,应该可以执行以下操作:

List<Date> getNextFiveRuns(Trigger trigger) {
    List<Date> runs = new ArrayList<>();
    Date next = trigger.getNextFireTime();

    // check for null, which indicates a non-repeating trigger or one with an end-time
    while(next != null && runs.size() < 5) {
      runs.add(next);
      next = trigger.getFireTimeAfter(next);
    }
    return runs;
}

Quartz 2.3.0 JavaDoc:org.quartz.Trigger

答案 1 :(得分:0)

您可以这样计算下一次运行时间:

import org.springframework.scheduling.support.CronTrigger;
import org.springframework.scheduling.support.SimpleTriggerContext;

public static void main(String[] args) {
    CronTrigger trigger = new CronTrigger("0 0 10 * * ?");
    SimpleTriggerContext triggerContext = new SimpleTriggerContext();
    Date testDate = new Date();
    int i = 0;
    while (i++ < 5) {
        triggerContext.update(null, null, testDate);
        testDate = trigger.nextExecutionTime(triggerContext);
        System.out.println(testDate);
    }
}

输出为:

    Wed Jun 05 10:00:00 CEST 2019
    Thu Jun 06 10:00:00 CEST 2019
    Fri Jun 07 10:00:00 CEST 2019
    Sat Jun 08 10:00:00 CEST 2019
    Sun Jun 09 10:00:00 CEST 2019

答案 2 :(得分:-1)

如果您只是想了解一下,可以使用http://www.cronmaker.com/计算接下来的几个预定运行时间

好像cronmaker也有一个API(我看到您提到您正在寻找API):

curl http://www.cronmaker.com/rest/sampler?expression={expression}

示例:

curl http://www.cronmaker.com/rest/sampler?expression=0 0/2 * 1/1 * ? *&hour=13&minute=45

来源:

http://www.cronmaker.com/help/rest-api-help.html