У меня есть запланированная работа в Spring, я получаю ее cron из своей базы данных. Каждый раз, когда он выполняется, время следующего выполнения обновляется. Итак, если он настроен на запуск каждые 10 минут, я могу изменить значение в базе данных, чтобы запланировать это задание каждые 15 минут.
Проблема в том, что мне нужно дождаться выполнения, чтобы получить обновленный cron: если задание запланировано каждые 15 минут, и я хочу изменить это значение на каждые 2 минуты, мне нужно дождаться следующего выполнения (до 15 минут). минут), чтобы эта работа выполнялась каждые 2 минуты.
Есть ли способ перепланировать эту работу после того, как я обновлю базу данных?
Я думал уничтожить и обновить этот бин, но он не работает (может быть, это невозможно или что-то не так в моей реализации). Возможно, есть способ инициировать событие для выполнения метода configureTask.
Вот фрагмент моей запланированной работы.
@EnableScheduling
@Component
public class MyClass implements SchedulingConfigurer {
private static final String JOB = "My personal task";
@Autowired
JobRepository jobRepository;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
System.out.println("Hello World!");
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
JobScheduled byJobNameIgnoreCase = jobRepository.findByJobNameIgnoreCase(JOB); // read from database
String cron = byJobNameIgnoreCase.getCrontab();
CronTrigger trigger = new CronTrigger(cron);
return trigger.nextExecutionTime(triggerContext);
}
});
}
}