随笔 - 234  文章 - 2  评论 - 20  阅读 - 49万

springboot 默认配置的线程池

 

线程池的大小通常都是我们比较关注的,SpringBoot 会为系统做默认配置。如果不清楚 SpringBoot 默认配置的线程池的大小的话,容易线上踩坑。

最近碰到一个生产问题,线上部署 6 台机器,定时任务A,B都在 17:00 执行,执行时会各自先获取分布式锁。(服务器时间是一致的)
理论上是可以做到同一时刻只有一台机器能够执行的,但实际情况是,定时任务 B 有的在 17:00.000 触发,有的机器上是 17:00.230 触发,有的机器上是 17:01.000 触发。

通过日志发现,晚触发的定时任务B都是在上一个定时任务A 执行完成之后,再执行的。而且执行的线程名都是 scheduling-1。
所以,猜想线程池可能只有一个,任务出现了等待,导致任务没有在准点触发。

 

查看源码发现,SpringBoot 默认配置的定时任务线程池中线程数是 1 个。

可能通过配置: spring.task.scheduling.pool.size=10   来设置线程池个数。也可以通过 TaskSchedulerCustomizer 来进行定制。

 

@Async 异步任务,SpringBoot 也是会进行线程池的默认配置的,默认设置的线程数是 8 个,taskQueue 的大小是无界(queueCapacity = Integer.MAX_VALUE),线程名前缀是 : task-

 

 

posted on   快鸟  阅读(2480)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2018-06-21 解决Spring Boot中,通过filter打印post请求的 request body 问题
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示