@Async 线程池踩坑指南
在 Spring 项目中Async可以让方法异步执行提高系统吞吐量。但是如果不注意线程池的配置很容易踩坑导致数据库连接耗尽、任务阻塞甚至系统崩溃。本文结合实际案例分享Async的坑点、解决方案以及如何通过消息队列中间件做异步解耦提高系统稳定性。1. 问题现象某项目需要给400 人发送会议通知每个人触发一个异步通知保存操作。结果出现了严重问题数据库连接池瞬间耗尽系统报错甚至崩溃异步任务执行混乱显然这并不是单纯的异步问题而是线程池配置导致的资源抢占。2. 根本原因2.1 Async 默认线程池的坑Spring 中如果Async没有指定线程池会使用SimpleAsyncTaskExecutor特点 - 无核心线程每次调用都创建新线程 - 无队列任务直接提交到线程执行也就是说400 个通知 400 个并发线程同时抢数据库连接 → 连接池瞬间爆满默认线程池适合轻量异步任务不适合批量任务或数据库密集型任务。2.2 为什么项目里全用 flowable-async 线程池项目中定义了一个Primary的applicationTaskExecutorflowable-async-*PrimaryBean(nameapplicationTaskExecutor)publicThreadPoolTaskExecutorapplicationTaskExecutor(){// core CPU核数 * 2, max core * 2}Spring 默认把所有 Async 调用都路由到这个池。问题是通知任务大量抢占 flowable 的线程flowable 自己的异步任务反而没线程可用这就造成了业务互相干扰性能反而下降。3. 解决方案3.1 创建专用线程池为高并发通知任务单独创建线程池Bean(namenoticeTaskExecutor)publicThreadPoolTaskExecutornoticeTaskExecutor(){intcpuCoresRuntime.getRuntime().availableProcessors();intcorePoolSizeMath.min(Math.max(2,cpuCores),3);intmaxPoolSizeMath.min(corePoolSize*2,8);intqueueCapacity50000;ThreadPoolTaskExecutorexecutornewThreadPoolTaskExecutor();executor.setCorePoolSize(corePoolSize);executor.setMaxPoolSize(maxPoolSize);executor.setQueueCapacity(queueCapacity);executor.setThreadNamePrefix(async-event-);executor.setWaitForTasksToCompleteOnShutdown(true);executor.setRejectedExecutionHandler(newThreadPoolExecutor.CallerRunsPolicy());executor.initialize();log.info(Async DB TaskExecutor initialized: core{}, max{}, queue{}, rejectPolicyCallerRuns,corePoolSize,maxPoolSize,queueCapacity);}3.2 指定 Async 使用专用池在异步方法上指定线程池或者把上述链接池配置改成全局连接池配置Async(noticeTaskExecutor)// 指定线程池名称EventListenerpublicvoidlisten(NoticeRecordSaveEventevent){// 执行通知保存逻辑}这样业务任务不会抢占 flowable 线程数据库连接池不会瞬间耗尽异步执行可控、稳定3.3 更进一步异步解耦到消息队列中间件当异步任务量大、数据库或业务资源有限时可以考虑消息队列解耦生产者只负责发送消息到队列如 RabbitMQ、Kafka、RocketMQ消费者从队列异步消费处理通知逻辑可以自由控制消费并发数、批量处理、重试机制这样可以达到流量削峰大量任务不会瞬间占用数据库连接业务解耦通知逻辑与主业务线程分离系统稳定异步任务可按队列速率消费不会刷爆线程池结合 Spring消息队列的消费端也可以结合专用线程池控制并发BeanpublicThreadPoolTaskExecutornoticeConsumerExecutor(){ThreadPoolTaskExecutorexecutornewThreadPoolTaskExecutor();executor.setCorePoolSize(3);executor.setMaxPoolSize(10);executor.setQueueCapacity(2000);executor.setThreadNamePrefix(notice-consumer-);executor.initialize();returnexecutor;}总结Async 专用线程池适合中小量异步任务高并发或跨系统异步场景建议结合消息队列做解耦。4. 总结原则说明Async 必须指定线程池否则用 SimpleAsyncTaskExecutor无限创建线程不同业务用不同线程池避免相互影响通知用专用池执行方法不加事务事务在同步调用层管理异步只管执行线程池大小参考连接池容量corePoolSize 不要超过数据库连接数高并发异步建议消息队列解耦队列削峰、异步消费、系统更稳定 小结Async不是“随便加个注解就行”合理的线程池设计和资源隔离至关重要。对于高并发异步任务结合消息队列中间件做异步解耦可以让系统更稳定、性能更可控。

相关新闻

一图读懂:科源制药医药主业筑基,脑机接口与具身智能打开成长空间

一图读懂:科源制药医药主业筑基,脑机接口与具身智能打开成长空间

今年3月,科源制药通过全资子公司参股成立北京航脑科技有限公司,正式切入脑机接口赛道;6月,航脑科技与仿生人形机器人企业EXROBOT签署战略合作协议,并计划成立合资公司。短短三个月内,科源制药从一家典型的化…

2026/7/23 20:26:32 阅读更多 →
高性能时钟分配芯片LMK01000:原理、设计与实战应用指南

高性能时钟分配芯片LMK01000:原理、设计与实战应用指南

1. 芯片概览与核心价值在高速数字系统设计的江湖里,时钟信号就像是整个系统的“心跳”。这颗心跳的强弱、节奏是否稳定,直接决定了系统能否跑得稳、跑得快。无论是5G基站里处理海量数据的FPGA和ADC,还是医疗CT机里对时序精度要求苛刻的数据采…

2026/7/23 20:25:32 阅读更多 →
2026 年教师评职称论文:别让假文献与 Word 格式拖慢材料准备

2026 年教师评职称论文:别让假文献与 Word 格式拖慢材料准备

从真实文献、期刊格式到全文逻辑检查,一次拆清职称论文该怎么选工具先说结论 生成一段“像论文的话”并不难,难的是让文献可核验、格式符合目标期刊要求、全文论证经得住编辑与同行审阅。单点工具各有用处;需要把写作、检索、排版和检查串起…

2026/7/23 20:25:32 阅读更多 →

最新新闻

澳洲PEO是什么?主要有什么优势?

澳洲PEO是什么?主要有什么优势?

澳洲PEO,即专业雇主组织,为企业提供多方面的人力资源管理解决方案。通过简化薪酬福利、风险管理与合规咨询、企业能够提升运营效率。与美国PEO类似加快市场进入时间。利用这一模式,企业能更加灵活地应对劳动力市场的变化,同时在竞…

2026/7/23 20:39:37 阅读更多 →
从DM6446到DM6467:嵌入式系统处理器迁移实战与避坑指南

从DM6446到DM6467:嵌入式系统处理器迁移实战与避坑指南

1. 项目概述与迁移背景在嵌入式系统开发领域,尤其是基于德州仪器(TI)DaVinci系列数字媒体片上系统(DMSoC)的视频处理、工业视觉或通信网关等应用中,我们经常会遇到一个经典且现实的工程挑战:如何…

2026/7/23 20:39:37 阅读更多 →
2026年奥地利名义雇主EOR高品质推荐榜单,赋能企业高效全球布局

2026年奥地利名义雇主EOR高品质推荐榜单,赋能企业高效全球布局

在2026年,奥地利的名义雇主EOR服务为企业提供了更加高效的全球布局选择。这些服务帮助企业轻松合规地雇佣国际员工,减少了法律和人力资源管理的复杂情况。各大EOR服务商通过灵活的平台、卓越的客户支持和实时数据分析、为不同规模和性质企业提供定制化方…

2026/7/23 20:39:37 阅读更多 →
Chrome扩展+WebGPU:3个前端工程师必须重新思考的AI性能边界

Chrome扩展+WebGPU:3个前端工程师必须重新思考的AI性能边界

浏览器端AI推理的性能优化实践与前沿技术展望 去年在为一个医疗影像标注工具集成AI推理功能时,我们团队在Chrome扩展中遭遇了令人难忘的技术挑战——当标注员同时打开10个标签页时,原本200ms的WebAssembly版YOLOv8模型推理时间突然暴跌至4秒。这个教训让…

2026/7/23 20:39:37 阅读更多 →
2026年法国名义雇主EOR服务排行:权威精选10大优质选项

2026年法国名义雇主EOR服务排行:权威精选10大优质选项

在2026年,随着全球化的深入发展,名义雇主(EOR)服务在法国市场变得越发重要。许多企业开始意识到,选择靠谱的EOR服务商有助于简化员工管理流程、降低合规风险。这类服务能够提供法律合规、薪酬处理及员工福利等一系列解…

2026/7/23 20:39:37 阅读更多 →
从DM642到DM6467:嵌入式处理器外设与中断系统迁移实战指南

从DM642到DM6467:嵌入式处理器外设与中断系统迁移实战指南

1. 项目概述与核心价值 在嵌入式多媒体处理器的选型与升级过程中,深入理解不同型号芯片在外设功能、中断架构和系统管理上的差异,是决定项目成败、影响开发周期的关键一步。我接触过不少从TI的DM642平台迁移到DM6467的项目,其中既有平滑过渡的…

2026/7/23 20:38:37 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻