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-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
2018-06-21 解决Spring Boot中,通过filter打印post请求的 request body 问题