Java Spring启动-调度程序配置
在SpringBoot应用程序中,我有几个预定的任务。我希望它们同时运行,因此在我的配置中,我应该创建Java Spring启动-调度程序配置,java,spring,multithreading,spring-boot,spring-scheduled,Java,Spring,Multithreading,Spring Boot,Spring Scheduled,在SpringBoot应用程序中,我有几个预定的任务。我希望它们同时运行,因此在我的配置中,我应该创建ThreadPoolTaskScheduler对象,并在ScheduledTaskRegistrar中注册它。 我找到了两种方法: 方式1 @Configuration @EnableScheduling public class SchedulerConfig implements SchedulingConfigurer { private final int POOL_SIZE
ThreadPoolTaskScheduler
对象,并在ScheduledTaskRegistrar
中注册它。
我找到了两种方法:
方式1
@Configuration
@EnableScheduling
public class SchedulerConfig implements SchedulingConfigurer {
private final int POOL_SIZE = 10;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(POOL_SIZE);
scheduler.setThreadNamePrefix("name");
scheduler.initialize();
scheduledTaskRegistrar.setTaskScheduler(scheduler);
}
}
方式2
@Configuration
@EnableScheduling
public class SchedulerConfig implements SchedulingConfigurer {
private final int POOL_SIZE = 10;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.setTaskScheduler(this.poolScheduler());
}
@Bean
public TaskScheduler poolScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(POOL_SIZE);
scheduler.setThreadNamePrefix("name");
return scheduler;
}
}
第二种方法更好,因为您让Spring处理类
任务调度器
,以后您可以在其他类中使用它,使用@Autowired
,如下所示:
@Autowired
TaskScheduler taskScheduler
为什么不调用ThreadPoolTaskScheduler对象的方式2初始化方法 因为现在,ThreadPoolTaskScheduler是一个bean,它遵循bean的生命周期 您可以看到ThreadPoolTaskScheduler实现了InitializingBean。 因此,在spring构建这个bean之后,它将调用AfterPropertieSet()方法 如果检查ThreadPoolTaskScheduler的代码,您将看到:
public void afterPropertiesSet() {
this.initialize();
}