我们必须将调度程序线程绑定到应用程序上下文。
我尝试使用@PostConstruct
,但是一旦应用程序启动,它就会启动调度程序,但是即使应用程序已关闭且服务器已启动,它仍在后台运行。
如果应用程序已关闭,则调度程序也应停止。
答案 0 :(得分:0)
我在Spring(即Spring Boot)中使用Scheduler的方式是在项目中包含两个类(因此,在构建后包含在我的.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中,因此当不再部署应用程序时,计划任务也将无法运行。