一个服务中多个@Scheduled注解的定时任务并发执行的问题
先介绍下历史背景
一个服务中有多个@Scheduled(cron=‘xxxxx’)的都是任务,并且这些任务的间隔时间都非常短,例如并行有5个任务 每个任务的执行间隔都是30秒钟,这些任务都是这个服务的基础数据缓存功能
事由
当我准备再添加一个比较重要的定时任务并配置@Scheduled(cron=" 0 0 3 * * ? ")时 ,第二天发现任务并没有被执行。
经过调试发现,我的这些定时任务已串行的方式在执行,当我给每个任务配置@Async注解发现也并不起作用,依旧是串行运行,并且因为最开始的5个基础任务执行间隔短且任务执行时间比较长,导致我新配置的这个凌晨3点的任务在每天都存在了未被触发的情况(有时候回触发成功)
后发现在一个服务中 ,配置的scheduled任务都是单线程池的,需要通过配置scheduled的线程池来扩容
具体配置如下
/*** 配置定时任务线程池为10,最多同时执行10个*/
@Configuration
@EnableScheduling
public class SchedulerConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));}
}
通过这样配置后在测试,发现我的所有Scheduled的定时任务都可以并行执行了