一、问题原因

tomcat启动加载spring容器时,如果spring使用TaskScheduler开启了debug模式,会造成Spring找不到默认TaskScheduler/ScheduledExecutorService的bean,从而启动的时候出现ScheduledExecutorService异常的日志。该报错不会影响定时任务的使用,但是以异常的形式在日志中存在。

2023-03-26 11:18:57 [ RMI TCP Connection(3)-127.0.0.1:10167 ] - [ DEBUG ] Could not find default ScheduledExecutorService bean
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.util.concurrent.ScheduledExecutorService' available
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:996)
	at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.resolveSchedulerBean(ScheduledAnnotationBeanPostProcessor.java:278)
	at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.finishRegistration(ScheduledAnnotationBeanPostProcessor.java:241)
	at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.onApplicationEvent(ScheduledAnnotationBeanPostProcessor.java:200)
...

2023-03-26 11:18:57 [ RMI TCP Connection(3)-127.0.0.1:10178 ] - [ INFO ] No TaskScheduler/ScheduledExecutorService bean found for scheduled processing

二、解决方案

1.修改日志模式

logging.level.org.springframework.scheduling=info

2.代码注册成spring中的bean

两种方式任选一种即可,主要是完成TaskScheduler类bean的注册

@Bean
public TaskScheduler taskScheduler() {
    return new ConcurrentTaskScheduler(); //single threaded by default
}
@Bean
public TaskScheduler taskScheduler(){
	ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
	scheduler.setPoolSize(10);
	scheduler.setThreadNamePrefix("scheduled-thread-");
	return scheduler;
}

3.xml配置文件方式

<task:scheduler id="scheduler" pool-size="10"/>

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐