未更改定时任务默认线程池大小导致的定时任务阻塞问题

最近线上出现了一个奇怪的问题,由于业务需要,我们通过定时任务进行定时excel 导入操作,但是常常会出现一些定时任务在某些时间段不执行的问题,由于业务需要,这里的定时任务都设置五分钟执行一次,但是事实并非如此,定时任务并没有五分钟执行一次,甚至间隔几个小时,都不执行一次,刚开始我以为是因为定时任务没有执行完成,不会进行下一次执行

我想到难不成定时任务一次只会执行一个@scheduled标注的方法所以我搜索了, Schedule定时任务同一时刻只执行一个任务,得到了以下答案:spring boot 的@Scheduled定时任务,同一时间段的定时任务只会执行一个,其余的会被阻塞等待_轻尘×的博客-CSDN博客查看源码发现默认线程池中只有一个线程,只能挨个执行,解决方法线程池多加几个线程,启动项类中加入如下配置@Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.setPoolSize(50);// 自定义线程个数 return taskScheduhttps://blog.csdn.net/leisure_life/article/details/106076440

后来为了查明原因我首先下载了源码后,搜索了Scheduled.class 虽然找到了一些相关的类但是并没有找到定时任务真正执行的位置,所以我再次搜索了“@scheduled 源码分析”,其中有一篇文章,其中有这样一段话:

 @Scheduled源码解析 | 小册免费学 - 掘金JDK定时任务的实现: `public class JDKTask { }` 定时任务池ScheduledThreadPool会不断的、定时的执行提交的任务。 且命名方式基本上都叫scheduleXxhttps://juejin.cn/post/6953485924181213220

 最终了解到其实真正执行还是线程池在执行,结合上面的文章重新配置了定时任务线程池,解决问题,以下是是实验流程:

 创建两个定时任务

 我把线程池配置注释掉只要执行到第一个任务就卡住

恢复线程池配置后,第一个任务卡住,第二个任务继续执行了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值