application.properties 中設定poolSize,這個其實是Spring提供的便捷方式。不過我們也可以 自己寫一個配置檔,更精細化 的設定參數。config/SchedulerConfiguration 專門設定自己的排程。SchedulingConfigurer 這個介面,並註冊我們設置好的TaskScheduler,這樣Spring才會接收並使用我們設置的TaskScheduler作為後續執行排程的元件。@EnableScheduling
@Configuration
public class SchedulerConfiguration implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar){
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
// 精細配置
threadPoolTaskScheduler.setPoolSize(3);
threadPoolTaskScheduler.setThreadNamePrefix("scheduling-task-");
threadPoolTaskScheduler.initialize();
// 註冊
scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
}
}
@EnableScheduling 不一定 要寫在 SpringApplication.run 的類別中,所以就搬到配置檔裡面ㄌ~@Scheduled 作為伺服器預設排程,而是根據使用者or函式呼叫時「動態」新增排程。@EnableScheduling
@Configuration
public class SchedulerConfiguration implements SchedulingConfigurer {
// ThreadPoolTaskScheduler作為Bean
@Bean
public ThreadPoolTaskScheduler taskScheduler(){
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(3);
threadPoolTaskScheduler.setThreadNamePrefix("scheduling-task-");
threadPoolTaskScheduler.initialize();
return threadPoolTaskScheduler;
}
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar){
scheduledTaskRegistrar.setTaskScheduler(taskScheduler());
}
}
本篇文章出自《每天學Java直到今年結束》Day221,大家可以到我的網站上查看~