Лучше всего использовать объект TaskScheduler
. Bean-компонент taskScheduler создается автоматически, если у вас есть @EnableScheduling
для класса, помеченного @Configuration
. Этот объект можно использовать для планирования работы на лету. Вот быстрый пример того, что вы можете сделать с ним:
@Configuration
@EnableScheduling
public class CronJobConfiguration implements CommandLineRunner {
@Autowired
private TestJobSchedulerRepository testJobSchedulerRepository;
@Autowired
private TaskScheduler taskScheduler;
@Override
public void run(String... strings) {
String cronExpression = testJobSchedulerRepository.findByIsActive(1).getCronExpression();
Trigger trigger = new CronTrigger(cronExpression);
ScheduledFuture scheduledFuture = taskScheduler
.schedule(() -> {/* the job you want to run*/}, trigger);
/* Keep the scheduledFuture to be able to cancel the job later Ex : */
scheduledFuture.cancel(true);
}
}
Возможно, вам потребуется сохранить объект ScheduledFuture
, возвращаемый методом расписания, чтобы иметь возможность отменить задание в какой-то момент. Также вам потребуется служба, использующая TaskScheduler
, чтобы вы могли планировать работу при вызове updateTestJobSchedule.