使用@EnableScheduling时是否必须创建名为taskExecutor的Bean?
问题解答
是否需要在PollingAgent中添加名为taskExecutor的TaskExecutor Bean?
不一定非要在这个配置类里新增,但你必须解决多个TaskExecutor Bean的冲突问题,有两种可行方案:
- 将现有任意一个TaskExecutor Bean的名称改为
taskExecutor,Spring默认会优先识别这个名称的Bean作为异步和定时任务的执行器; - 给其中一个TaskExecutor Bean添加
@Primary注解,标记它为Spring优先选择的执行器。
如果现有TaskExecutor都不符合你的调度/异步业务需求,也可以在PollingAgent里新增一个命名为taskExecutor的TaskExecutor Bean来统一使用。
为何Spring框架在使用@EnableScheduling时不会自动创建该Bean?
Spring的设计逻辑是:只有当上下文里不存在任何TaskExecutor或ThreadPoolTaskScheduler类型的Bean时,@EnableScheduling才会自动创建一个默认的SimpleAsyncTaskExecutor作为调度器。但你的场景里已经存在多个自定义的TaskExecutor Bean,Spring不会覆盖或替换这些自定义Bean,而是要求你明确指定使用哪一个——因为它无法自动判断你想选用哪个执行器处理定时任务和异步方法,所以才抛出了对应的提示。
内容的提问来源于stack exchange,提问作者lightrek
相关产品推荐
相关产品推荐

