Spring 3: пространство имен задачи: как узнать время следующего выполнения? - PullRequest
3 голосов
/ 30 апреля 2010

У меня есть компонент, метод которого выполняется по расписанию с использованием <task:scheduled> в конфигурации контекста.

Есть ли способ найти время следующего запланированного запуска во время выполнения этого метода?

Тот же метод также выполняется вручную, и механизм получения информации о планировщике не может прерывать выполнение извне планировщика ...

Ответы [ 2 ]

2 голосов
/ 28 августа 2015

Для тех, кто использует не кварц, а пружину, я достиг следующего времени выполнения, расширив 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;
    }
}
2 голосов
/ 03 мая 2010

Стиль конфигурации <task:scheduled> представляет собой удобный ярлык для базовых компонентов фабрики Spring, которые генерируют планировщики и расписания. Для удобства это полезно, но гораздо менее гибко, чем непосредственное использование базовых фабрик планировщика.

Сказав это, самим планировщикам нужно будет предоставить информацию о "следующем времени срабатывания" через их API, и это зависит от реализации. Например, я не вижу способа получить эту информацию из стандартных ScheduledExecutorService реализаций.

Кварц, однако, показывает это через метод getNextFireTime() в классе Trigger.

Если вы готовы отказаться от <task:scheduled> и , используйте интеграцию Quartz-Spring напрямую , тогда вы можете получить доступ к Trigger (или TriggerBean) и получить то, что вам нужно способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...