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