我有一個春季計劃任務運行每小時需要運行不重疊。 但是我遇到了一個問題,即任務啓動兩次,但在單獨的線程池中。春季計劃任務重疊在多個線程池
配置
@Configuration
@EnableScheduling
public class AppConfiguration implements SchedulingConfigurer {
// ...
@Bean(destroyMethod="shutdown")
public Executor taskExecutor() {
return Executors.newSingleThreadScheduledExecutor();
}
@Override
public void configureTasks(final ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.setScheduler(taskExecutor());
}
}
作業類
@Service
public class JobClass {
@Scheduled(fixedDelay = 3600000)
public void doJob() {
LOG.debug("Start Task");
}
}
日誌輸出
DEBUG 2016-09-26 15:49:08,874 [pool-2-thread-1][] JobClass - Start Task
DEBUG 2016-09-26 15:49:10,249 [pool-1-thread-1][] JobClass - Start Task
有什麼辦法強制只使用一個線程池?
從'newSingleThreadScheduledExecutor'的Executor文檔:「與其他等價的'newScheduledThreadPool(1)'不同,保證返回的執行程序不能重新配置爲使用其他線程。」所以結果是一樣的,除了我目前的代碼保證沒有額外的線程。在我自己的測試中,我已經嘗試過您的示例,以使其發揮作用並獲得相同的結果。 – kgengler