Простой ответ:
scheduler.rescheduleJob(trigger.getKey(), trigger);
Подробный ответ:
- Как управлять с помощью обновлений триггера кварцевых заданий
scheduler.rescheduleJob (trigger.getKey (), trigger);
- Как управлять с помощью обновлений заданий кварца
Это не важнобольше, если триггер обновлен.
- Как зарегистрировать экспоненциально увеличивающуюся стратегию времени задержки для триггера?
один триггер может быть перенесен на любой другойвремя.Время для следующего выполнения может быть рассчитано с использованием любой реализации IntervalCalculationStrategy
.
Пример переназначения задания:
Задание и сведения о задании можно взять из JobExecutionContext
, но не обязательно.Триггер может быть подключен только к одному заданию, поэтому он достаточно хорош для обновления кварца triggerKey
:
@Autowired
private Scheduler scheduler;
@Autowired
private IntervalCalculationStrategy intervalCalculation;
public <T extends QuartzJobBean> void registerSecurePayPostServiceJob(
JobExecutionContext firedJobExecutionContext) {
Optional<SimpleTriggerImpl> mutableTrigger =
ofNullable(firedJobExecutionContext)
.map(JobExecutionContext::getTrigger)
.filter(SimpleTriggerImpl.class::isInstance)
.map(SimpleTriggerImpl.class::cast);
try {
if (mutableTrigger.isPresent()) {
SimpleTriggerImpl trigger = mutableTrigger.get();
int nextAttemptNumber = trigger.getTimesTriggered();
log.trace("trigger: {} fired [{}] times", trigger.getFullName(),
trigger.getTimesTriggered());
trigger.setStartTime(intervalCalculation.calculateNextTryDate(nextAttemptNumber));
this.scheduler.rescheduleJob(trigger.getKey(), trigger);
}
} catch (SchedulerException e) {
log.error("job was not rescheduled <{}>", firedJobExecutionContext.getJobDetail(), e);
}
}