Java: Quartz scheduler - есть ли способ получить следующие пять запусков запланированного задания - PullRequest
0 голосов
/ 04 июня 2019

Есть ли API, который дает следующие n запусков выражения cron.

Ответы [ 3 ]

1 голос
/ 05 июня 2019

Кварцевые задания планируются с помощью триггера (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;
}

Кварц 2.3.0 JavaDoc: org.quartz.Trigger

0 голосов
/ 05 июня 2019

Вы можете рассчитать время следующего запуска следующим образом:

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
0 голосов
/ 04 июня 2019

Если вы хотите просто понять, вы можете использовать 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

...