SpringBoot 多种优雅的线程池配置与使用(异步执行函数,反射机制,动态识别参数,有返回值)
想要明白生活你需要先经历它,而不是总在分析它。 —萨莉·鲁尼
文章目录
- 前言
- 一、@Async注解
- 1. 概念
- 2. 使用
- 2.1 使用@EnableAsync启动函数异步支持
- 2.2 不会异步执行的坑
- 2.2.1 为什么内部调用不会异步执行?
- 2.2.2 如何确保@Async方法异步执行?
- 3. 配置线程池
- 3.1 通过代码配置
- 3.1.1 线程池配置
- 3.1.2 自定义异步任务执行异常处理类
- 3.2 通过配置文件配置
- 4. 四种不同的拒绝策略
- 4.1 AbortPolicy
- 4.2 CallerRunsPolicy
- 4.3 DiscardPolicy
- 4.4 DiscardOldestPolicy
- 4.5 自定义拒绝策略
- 5. 示例
- 5.1 验证异步、配置、异常处理是否生效示例
- 5.2 不会异步执行的两个自调用示例
- 5.3 由Spring管理的Bean异步执行的两个示例
- 二、定时异步任务
- 1. 注册定时异步任务Bean
- 2. 定时异步任务执行异常打印
- 3. 异步任务管理器
- 4. 异步工厂
- 5. 停止应用时关闭定时异步任务线程池
- 6. 调用定时异步任务示例
- 三、CompletableFuture异步任务(可带参数,有返回值)
- 1. 无参无返回值异步方法示例
- 2. 使用自定义的线程池来代替 CompletableFuture 默认的线程池
- 3. 安全的参数类型
- 3.1 一个参数有返回值异步方法示例
- 3.2 两个参数有返回值异步方法示例
- 4. 不安全的参数类型
- 4.1 更多参数有返回值异步方法示例
- 4.1.1 三个参数有返回值异步方法示例
- 4.1.2 四个参数无返回值异步方法示例
- 4.1.3 参数越过下标的异常异步方法示例
- 4.2 利用反射实现参数动态识别的异步方法示例
前言
在现代软件开发领域,异步编程已成为提升应用程序性能与响应速度的关键技术之一。随着互联网服务的用户量级不断增长,系统需要处理的并发请求日益增多,传统的同步处理方式往往导致线程资源被长时间占用,影响了系统的吞吐量与用户体验。因此,采用异步处理机制,将耗时操作(如I/O操作、数据库查询、外部服务调用等)剥离主线程,让这些操作并行执行,成为了提高应用效率的标准实践。
Spring框架作为Java企业级应用的主流选择,内置了对异步方法的支持,允许开发者通过@Async注解轻松标记需要异步执行的方法。这一特性基于Spring的代理机制实现,能够自动管理线程池,简化了异步编程的复杂度。然而,正确使用异步功能还需注意一些细节,例如避免在同类内直接调用异步方法(因为这通常会绕过Spring的代理,从而无法实现预期的异步效果),以及合理配置线程池参数以适应不同的业务场景需求。
此外,对于定时任务与复杂异步流程控制,Spring框架结合定时任务调度器(如ScheduledExecutorService)与现代Java并发API(如CompletableFuture)提供了强大的支持。CompletableFuture不仅能够以声明式的方式链式安排异步任务,还支持任务间的依赖关系管理,以及灵活的回调处理,极大地增强了异步编程的灵活性与可控性。
本篇内容围绕Spring异步编程的核心概念、常见问题、最佳实践展开,通过示例代码深入浅出地解析了如何有效配置与利用S
相关文章:
SpringBoot 多种优雅的线程池配置与使用(异步执行函数,反射机制,动态识别参数,有返回值)
想要明白生活你需要先经历它,而不是总在分析它。 —萨莉鲁尼 文章目录 前言一、@Async注解1. 概念2. 使用2.1 使用@EnableAsync启动函数异步支持2.2 不会异步执行的坑2.2.1 为什么内部调用不会异步执行?2.2.2 如何确保@Async方法异步执行?3. 配置线程池3.1 通过代码配置3.1.…...
ansible copy模块--持续创作中
copy模块用于将文件从ansible控制节点(管理主机)或者远程主机复制到远程主机上。其操作类似于scp(secure copy protocol)。 关键参数标红。 参数: src:(source:源) 要复制到远程…...
自学SAP是学习ECC版本还是S4版本?
很多人想学SAP,问我应该学ECC版本还是S4版本,我的建议如果你是自学的话,我个人建议使用ECC版本就行,因为这两个版本前台业务和后台配置的操作差异并不大,主要差异在于数据库的差异,前台业务操作和后台系统配…...
银河麒麟4.0.2安装带有opengl的Qt5.12.9
银河麒麟4.0.2下载地址:银河麒麟-银河麒麟(云桌面系统)-银河麒麟最新版下载v4.0.2-92下载站 VirtualBox:https://www.virtualbox.org/wiki/Downloads qt下载:Index of /archive/qt/5.12/5.12.9 1安装VirtualBox:网上教材比较多 1)安装完后安…...
django学习入门系列之第二点《浏览器能识别的标签3》
文章目录 列表表格往期回顾 列表 无序列表 <!-- <ul </ul> 无序列表 --> <ul><li> 内容1 </li><li> 内容2 </li><li> 内容3 </li><li> 内容4 </li> </ul>有序列表 <!-- <ol> &…...
git常见实用命令,简单上手操作
常用命令: 添加远程账号名称:git config --global user.name ‘’ 添加用户eamil:git config --global user.email ‘’ 初始化厂库:git init 新建文件夹:mkdir 文件夹名 新建文件:touch 文件名 查看…...
2-11 基于matlab的BP-Adaboost的强分类器分类预测
基于matlab的BP-Adaboost的强分类器分类预测,Adaboost是一种迭代分类算法,其在同一训练集采用不同方法训练不同分类器(弱分类器),并根据弱分类器的误差分配不同权重,然后将这些弱分类器组合成一个更强的最终…...
Neo4j图形数据库查询,Cypher语言详解
Cypher语言详解 Cypher是一种专为Neo4j图形数据库设计的声明式查询语言。它类似于SQL,但其设计目标是便于表达图数据库中常见的图形结构和操作。本文将详细介绍Cypher语言的基本语法、常见操作、高级功能以及使用Cypher进行图形数据分析的技巧。 1. Cypher的基本概…...
C# Winform Datagridview控件使用和详解
DataGridView 是一种以表格形式显示数据的控件,由Rows(行),Columns(列),Cells(单元格)构成。本实例将综合利用DataGridView的属性和事件,展示不同的表格风格数据和操作。包含: 添加Datagridview行,列数据设…...
xshell传输文件速率为0
你们好,我是金金金。 场景 此时我通过xshell客户端上传文件,速率一直为0 解决 安装 yum -y install lrzsz 即可 这个工具主要提供 rz 和 sz 命令,用于通过 Zmodem 协议在本地计算机和远程服务器之间传输文件 编写有误还请大佬指正࿰…...
2.spring cloud gateway 源码编译
spring cloud gateway编译 1.编译 命令 mvn clean compile -U2.报错 报错信息 核心信息 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.1.2:check (checkstyle-validation) on project spring-cloud-gateway-mvc: Failed during …...
[Linux] UDP协议介绍:UDP协议格式、端口号在网络协议栈那一层工作...
TCP/IP网络模型, 将网络分为了四层: 之前的文章中以HTTP和HTTPS这两个协议为代表, 简单介绍了应用层协议. 实际上, 无论是HTTP还是HTTPS等应用层协议, 都是在传输层协议的基础上实现的 而传输层协议中最具代表性的就是: UDP和TCP协议了. 以HTTP为例, 在使用HTTP协议通信之前, …...
Spring Boot 中如何解决跨域问题、Spring Cloud 5大组件、微服务的优缺点是什么?
Spring Boot 中如何解决跨域问题 ? SpringMVC项目中使用CrossOrigin注解来解决跨域问题 , 本质是CORS RequestMapping("/hello")CrossOrigin(origins "*")//CrossOrigin(value "http://localhost:8081") //指定具体ip允许跨域public String …...
[Vulnhub] Sleepy JDWP+Tomcat+Reverse+Reverse-enginnering
信息收集 Server IP AddressPorts Opening192.168.8.100TCP:21,8009,9001 $ nmap -sV -sC 192.168.8.100 -p- --min-rate 1000 -Pn Starting Nmap 7.92 ( https://nmap.org ) at 2024-06-20 05:06 EDT Nmap scan report for 192.168.8.100 (192.168.8.100) Host is up (0.00…...
基于MATLAB的误码率与信噪比(附完整代码与分析)
目录 一. 写在前面 二. 如何计算误码率 三. 带噪声的误码率分析 3.1 代码思路 3.2 MATLAB源代码及分析 四. 总结 4.1 输入参数 4.2 规定比特长度 4.3 特殊形式比较 一. 写在前面 (1)本文章主要讨论如何仿真误码率随着信噪比变化的图像 &#…...
【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 字符串筛选排序(100分) - 三语言AC题解(Python/Java/Cpp)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 字符串筛选排序(100分) 🌍 评测功能需要 订阅专栏 后私信…...
# 开发安全
开发安全 文章目录 开发安全安全开发生命周期安全开发目标安全开发基本准则注入类攻击手段Sql注入命令执行命令执行防御文件遍历防御 植入类安全漏洞防御XSS(前端漏洞)防御 储存型XSS文件上传防御 CSRF防御 会话固定防御 其它类型安全漏洞越权访问防御 口…...
Qt MaintenanceTool.exe使用镜像源更新Qt
环境:Windows11,Qt6.5,新版的MaintenanceTool.exe linux环境类似,mac环境可以看官方文档。 cmd命令窗口:切换到MaintenanceTool.exe所在目录,可以用“D:”切换到D盘,“cd xxxx”切换到xxxx目录…...
Java 8 Stream API介绍
Java 8引入了Stream API,这是对集合框架的一种增强,它允许你以一种声明式的方式处理数据集合。Stream API的核心在于将数据的操作分为两个主要阶段:中间操作和终端操作。中间操作返回的是一个新的Stream,可以链式调用多个中间操作…...
【前端技巧】css篇
利用counter实现计数器 counter-reset:为计数器设置名称,语法如下: counter-rese: <idntifier><integer>第一个参数为变量名称,第二个参数为初始值,默认为0 counter-increment:设置计数器增…...
用电脑自动玩小红书,OpenClaw+ADB让效率翻倍!附详细教程“
本文介绍了如何使用OpenClaw(运行在MacOS上)结合ADB工具实现Android手机的自动化操作。内容涵盖Android手机配置(开启开发者选项和USB调试)、MacOS环境准备(安装ADB工具和配置ADBKeyboard支持中文输入)&…...
新手小白必看!AI大模型自学路线图,从入门到精通_自学AI大模型学习路线推荐
自学AI大模型学习路线推荐 今天,我想和大家分享一条自学AI大模型的学习路线,希望能帮助新手小白们更好地进入这个领域。 1. 打好基础:数学与编程 数学基础 线性代数:理解矩阵、向量、特征值、特征向量等概念。推荐课程:…...
GPU流水线设计:提升深度学习计算效率的关键技术
1. GPU流水线设计基础概念现代GPU架构为深度学习工作负载提供了强大的并行计算能力,但传统的批量同步并行(BSP)执行模型存在资源利用率低下的问题。GPU流水线技术通过将计算图分解为多个阶段并在其间插入队列节点,实现了计算与通信的重叠执行。1.1 传统B…...
Gorilla:让大语言模型学会调用API,从聊天机器人到智能体的关键技术
1. 项目概述:当大语言模型学会“使用工具”如果你在过去一年里深度使用过 ChatGPT、Claude 或者国内的文心一言、通义千问这类大语言模型,你肯定有过这样的体验:模型在聊天、写作、分析上表现惊艳,但一旦你问它“帮我查一下明天的…...
别再只用XXL-Job了!用Go写的Temporal,搞定延时发短信、定时对账这些复杂工作流真香
从XXL-Job到Temporal:用Go重构复杂工作流的实战指南 如果你正在使用Java系的XXL-Job处理定时任务,却苦于复杂业务逻辑的编排困难,那么是时候认识Temporal了。这个用Go编写的分布式工作流引擎,正在重新定义我们处理延时任务、多步骤…...
Python自动化红头文件生成:ReportLab与Jinja2技术实践
1. 项目概述:一个自动化的红头文件生成工具 最近在整理一些行政和项目文档时,经常需要处理格式要求极为严格的“红头文件”。这类文件通常用于正式通知、公告或批复,其版头、字体、字号、间距乃至印章位置都有近乎刻板的规定。手动在Word里调…...
在Android Termux中搭建轻量级Docker容器环境:原理、部署与实战
1. 项目概述与核心价值最近在折腾移动设备上的开发环境,发现一个挺有意思的项目:George-Seven/Termux-Udocker。简单来说,它是在Android平台的Termux终端模拟器里,实现一个轻量级的Docker容器运行环境。这玩意儿解决了一个挺实际的…...
OpenClaw Memory启动器:快速构建AI记忆系统的开源脚手架
1. 项目概述:一个为AI记忆系统设计的开源启动器最近在折腾AI应用开发,特别是那些需要长期记忆和上下文管理的项目时,发现了一个挺有意思的GitHub仓库:christiancaviedes/openclaw-memory-starter。这本质上是一个为“OpenClaw Mem…...
oh-my-prompt:打造高效终端提示符的模块化方案与实战配置
1. 项目概述:为什么我们需要一个现代化的终端提示符?如果你和我一样,每天有超过一半的工作时间是在终端(Terminal)里度过的,那么终端提示符(Prompt)就是你最熟悉的“工作台面”。默认…...
从亚投行高大幕墙钢架设计谈幕墙结构变形设计
从亚投行高大幕墙钢架设计谈幕墙结构变形设计 【摘 要】 幕墙变形设计是幕墙设计时一个非常重要的考虑要素,它是决定幕墙结构设计质量的关键因素。本文以亚洲基础建设投资银行总部大楼项目南北中厅立面高大幕墙钢架设计为例,从宏观、中观和微观三个维度分析与其连接的主…...
