Spring集成自动配置
TaskScheduler
,这是
TaskExecutor
。
我刚刚查看了boot的自动配置,如果它在应用程序上下文中正好找到一个任务执行器,它会将其连接到quartz factory bean中:
public QuartzAutoConfiguration(QuartzProperties properties,
ObjectProvider<List<SchedulerFactoryBeanCustomizer>> customizers,
ObjectProvider<Executor> taskExecutor, ObjectProvider<JobDetail[]> jobDetails,
ObjectProvider<Map<String, Calendar>> calendars,
ObjectProvider<Trigger[]> triggers, ApplicationContext applicationContext) {
this.properties = properties;
this.customizers = customizers.getIfAvailable();
this.taskExecutor = taskExecutor.getIfUnique();
this.jobDetails = jobDetails.getIfAvailable();
this.calendars = calendars.getIfAvailable();
this.triggers = triggers.getIfAvailable();
this.applicationContext = applicationContext;
}
和
if (this.taskExecutor != null) {
schedulerFactoryBean.setTaskExecutor(this.taskExecutor);
}
然后,quartz factory bean配置
LocalTaskExecutorThreadPool
它没有线程计数属性。
您可以添加第二个任务执行器,以便
getIfUnique()
调用将返回null。
我建议您针对
spring-boot
看看他们是否能以某种方式避免这个问题。
编辑
您还应该能够添加
bean.setTaskExecutor(null);
到您的
SchedulerFactoryBeanCustomizer
恢复以前的行为。