Java Spring启动-调度程序配置

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

在SpringBoot应用程序中,我有几个预定的任务。我希望它们同时运行,因此在我的配置中,我应该创建
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;
    }
}
  • 哪种方法更好,或者他们做的完全一样
  • 为什么不调用ThreadPoolTaskScheduler对象的方式2初始化方法
    第二种方法更好,因为您让Spring处理类
    任务调度器
    ,以后您可以在其他类中使用它,使用
    @Autowired
    ,如下所示:

    @Autowired
    TaskScheduler taskScheduler  
    

    为什么不调用ThreadPoolTaskScheduler对象的方式2初始化方法

    因为现在,ThreadPoolTaskScheduler是一个bean,它遵循bean的生命周期

    您可以看到ThreadPoolTaskScheduler实现了InitializingBean。 因此,在spring构建这个bean之后,它将调用AfterPropertieSet()方法

    如果检查ThreadPoolTaskScheduler的代码,您将看到:

    public void afterPropertiesSet() {
        this.initialize();
    }