我有一个春季计划任务运行每小时需要运行不重叠。 但是我遇到了一个问题,即任务启动两次,但在单独的线程池中。春季计划任务重叠在多个线程池
配置
@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