Spring Boot - Scheduler configuration

nik :

In Spring Boot application I have several scheduled tasks. I want them to run simultaneously, so in my configuration I should create ThreadPoolTaskScheduler object and register it in ScheduledTaskRegistrar. I find two ways to do that:

way 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);
    }
}

way 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;
    }
}
  1. Which way is better or they do exactly the same?
  2. Why in way 2 initialize method of ThreadPoolTaskScheduler object isn't called?
user7294900 :

Second way is better because you let Spring handle class TaskScheduler and later you can use it in other classes using @Autowired as:

@Autowired
TaskScheduler taskScheduler  

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=131695&siteId=1