То, как я использовал Scheduler в Spring (то есть Spring Boot), заключается в том, чтобы в моем проекте было два класса (и, следовательно, они включены в мой .jar после сборки).
1 - SchedulerConfig (необходимо для конфигурации)
@Configuration
public class SchedulerConfig implements SchedulingConfigurer {
private final int POOL_SIZE = 10;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(POOL_SIZE);
threadPoolTaskScheduler.setThreadNamePrefix("my-scheduled-task-pool-");
threadPoolTaskScheduler.initialize();
scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
}
}
2 - ScheduledTasks (фактические запланированные задачи с частотой, определяемой выражением cron)
@Component
public class ScheduledTasks {
private static final Logger LOG = Logger.getLogger(ScheduledTasks.class);
@Scheduled(cron = "0 0 * ? * *")
public void doSomething() {
// Do something
}
}
Следовательно, как и всевключается в работающий .jar, когда приложение больше не развертывается, запланированные задачи также не будут запускаться.
См. также https://www.baeldung.com/spring-scheduled-tasks