@Async正确使用姿势
Async注解的正确使用方式默认线程池行为分析直接使用Async注解且未指定线程池时若容器内无taskExecutor命名的Bean默认采用SimpleAsyncTaskExecutor。该线程池因性能问题不被Spring官方推荐。Spring Boot 2.1.x版本后引入TaskExecutionAutoConfiguration自动配置默认线程池ThreadPoolTaskExecutor核心线程数8采用无界队列。此配置优于SimpleAsyncTaskExecutor但存在条件限制。线程池选择规则当容器中存在自定义Executor类型Bean时TaskExecutionAutoConfiguration不会注册默认线程池。此时若容器中仅有一个Executor类型BeanAsync默认使用该Bean。若存在多个Executor且无taskExecutor命名的Bean系统会提示需指定主候选或命名一个Bean为taskExecutor否则回退到SimpleAsyncTaskExecutor。使用建议对于Spring Boot 2.1.x及以上版本无自定义线程池时自动使用默认ThreadPoolTaskExecutor。存在单个自定义线程池时Async默认绑定该线程池。存在多个自定义线程池时必须通过Primary或命名taskExecutor显式指定否则触发默认回退机制。代码示例ConfigurationpublicclassAsyncConfig{Bean(nametaskExecutor)publicExecutorcustomExecutor(){ThreadPoolTaskExecutorexecutornewThreadPoolTaskExecutor();executor.setCorePoolSize(4);executor.setMaxPoolSize(10);returnexecutor;}}Async注解可以使被修饰的方法成为异步方法简单且方便这篇文章将教你如何正确的使用它 先谈谈大多数人对Aysnc的认识 如果直接使用Async未指定线程池 并且 容器内也没有beanName为taskExecutor的bean则会使用org.springframework.core.task.SimpleAsyncTaskExecutor注这个默认的线程池挺坑的spring官方也不推荐使用 到了springboot2.1.X时代一切都变了新增了一个TaskExecutionAutoConfiguration他的出现让你可以摆脱SimpleAsyncTaskExecutor带来的苦楚 当然只是一定程度上~~~先贴个代码 红框中的是springboot默认给的配置核心8个无界队列等等参数相比SimpleAsyncTaskExecutor还是香了很多不是嘛~~~那是否可以说springboot2.1.X就可以直接使用Async反正不是SimpleAsyncTaskExecutor了 这句话是不全对的有场景限制 你看看这里还“藏着”一个ConditionalOnMissingBean表明只要在容器中有Executor这类型得bean就不会再去注册它 例如如下代码在项目中手动定义了一个Executor类型的bean并注入到容器中 问题1 那是不是只要容器中有自定义的Executor类型得bean那Async就又会使用SimpleAsyncTaskExecutor了呢 并不是再看一下代码 这里会去容器中取如果取不到或者取到了多个会异常则返回null那最终使用的就是SimpleAsyncTaskExecutor了 这里回复下问题1 如果容器中有Executor类型的bean那么springboot就不会给我们往容器中注册默认Executor类型bean这时直接使用Async和Async(线程池bean名)是使用的同一个线程池 那问题来了如果我自定义多个Executor类型得bean并且都注册到容器中会发生什么呢 那就会打印一段描述信息给与我们一些提示Morethan oneTaskExecutorbean found within the context,and none is namedutaskExecutor.Markone of them as primary or name it taskExecutor(possibly as an alias)in ordertouseitforasync processing:exgetBeanNamesFound()这里表明容器内必须得有一个beanName为 taskExecutor的线程池否则那就回到最初的起点使用SimpleAsyncTaskExecutor总结一下上述 前提使用的springboot2.1.X及以上版本1.项目没有自定义Executor注册到容器那么Async使用的是springboot默认配置的ThreadPoolTaskExecutor2.项目如果有自定义Executor且只自定义了一个那么Async则默认使用的就是它3.项目中自定义了多个Executor且没有一个beanName为taskExecutor那么则会使用SimpleAsyncTaskExecut

相关新闻

咱们玩步进电机的都知道,硬启硬停那震动能把桌子晃出节奏感。今天给大伙扒一扒STM32F103上实现的S型加减速算法,重点不是讲电机驱动原理,直接上代码说门道

咱们玩步进电机的都知道,硬启硬停那震动能把桌子晃出节奏感。今天给大伙扒一扒STM32F103上实现的S型加减速算法,重点不是讲电机驱动原理,直接上代码说门道

stm32步进电机加减速代码 stm32f103 stm32步进电机S型加减速程序源码与详细分析,资料为算法实现以及算法的相关讲解,例程中有stm32f103步进电机S型加减速的完整工程代码,对步进电机s型加减速控制很有帮助。先看这个计算步进间隔的核心函数&a…

2026/7/4 4:05:12 阅读更多 →
Jimmy Zhang

Jimmy Zhang

碧阉媒泻虽然说是手算,但是我还是会写一点 C# 代码,避免敲坏了计算器。我和大家保证,整个手算过程中,最终的计算结果只需要用到初高中知识。推导过程会用到部分高数的知识。我尽量将用到的知识点全列举出来,本文对学渣…

2026/7/7 3:36:03 阅读更多 →
git寻根——^和~的区别

git寻根——^和~的区别

呛醚脊何一、运行效果 ??演示使用C#写的LiveCharts,点击按钮动态生成一些数据。 1. Android真机运行 2. 模拟器运行 二、实现原理 ??原理比较简单,如下图所示,将C#写的PixUI应用及C写的Skia引擎编译为WebAssembly,然后通过微信…

2026/7/5 0:25:14 阅读更多 →

最新新闻

【Springboot毕设全套源码+文档】springboot基于人工智能的智能客服系统设计与实现(丰富项目+远程调试+讲解+定制)

【Springboot毕设全套源码+文档】springboot基于人工智能的智能客服系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/7 3:33:32 阅读更多 →
uni-app + Spring Boot 实现 WiFi/蓝牙双因子考勤:设备配置、距离校验和打卡证据链

uni-app + Spring Boot 实现 WiFi/蓝牙双因子考勤:设备配置、距离校验和打卡证据链

很多考勤系统一开始只做 GPS 定位,结果上线后争议反而变多:员工明明在公司,系统提示“不在范围”;办公楼里定位漂移,主管说不清到底是不是误判;门店和仓库只有几十米距离,地图点位一偏就跨区。 …

2026/7/7 3:22:31 阅读更多 →
本地大模型端口暴露风险与Ollama/Dify/vLLM安全加固指南

本地大模型端口暴露风险与Ollama/Dify/vLLM安全加固指南

1. 项目概述:这不是漏洞预警,而是一次本地大模型安全意识的集体补课“我找到了上万个本地部署的DeepSeek大模型!”——这句话乍看像黑客炫耀战果,实则是一记响亮的警钟。它背后没有神秘exploit,没有0day漏洞&#xff0…

2026/7/7 3:20:30 阅读更多 →
mysql数据库服务器的启动方式(默认开机自启)

mysql数据库服务器的启动方式(默认开机自启)

方式一:可视化界面启动1.Win R 打开运行框2.输入:services.msc3.点击回车4.在打开的列表中下划找到mysql80 鼠标右键点击方式二:命令提示符启动1.在开始界面中搜索cmd 右键以管理员身份运行2.在终端窗口中输入:net start mysql80 3.关闭服务…

2026/7/7 3:18:30 阅读更多 →
5步彻底解决Visual C++运行库问题:VisualCppRedist AIO实用指南

5步彻底解决Visual C++运行库问题:VisualCppRedist AIO实用指南

5步彻底解决Visual C运行库问题:VisualCppRedist AIO实用指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 还在为"MSVCP140.dll缺失"、…

2026/7/7 3:16:30 阅读更多 →
Linux设置触屏双击距离容差

Linux设置触屏双击距离容差

安装 sudo apt install xsettingsd # Debian/Ubuntu 创建配置文件,数值单位是像素(例如 15) echo ‘Net/DoubleClickDistance 15’ > ~/.xsettingsd 启动守护进程(测试用) xsettingsd & 加入自启动&…

2026/7/7 3:16:29 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻