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

3

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


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


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

спросил(а) 2010-04-30T16:39:00+04:00 9 лет, 6 месяцев назад
2
2 ответа
2

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

ответил(а) 2015-08-28T11:40:00+03:00 4 года, 2 месяца назад
2

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


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

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


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

ответил(а) 2010-05-03T18:41:00+04:00 9 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема