news 2026/10/23 2:19:48

spring项目中业务逻辑涉及异步调用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
spring项目中业务逻辑涉及异步调用

两种异步模型的分叉点

@Async 和CompletableFuture.supplyAsync(() -> { … }) 正面对比

一、两种写法放一起看 👇
1️⃣ 你现在用的(Spring 推荐,企业级)
@Async
public void runTaskAsync(String pasaTaskId, String daHost, String runPath) {
// 异步逻辑
}

调用:

pasaAsyncService.runTaskAsync(…);

2️⃣ CompletableFuture 写法
CompletableFuture.supplyAsync(() -> {
// 异步逻辑
return result;
});

或:

CompletableFuture.runAsync(() -> {
// 无返回值
});

二、核心区别对比(重点)
对比点 @Async CompletableFuture.supplyAsync
线程池管理 ✅ Spring 统一管理 ❌ 默认 ForkJoinPool
是否推荐在 Spring 项目用 ✅ 强烈推荐 ⚠️ 有条件使用
AOP / 事务 / 安全上下文 ✅ 支持 ❌ 不支持
可读性 ✅ 清晰 ⚠️ 容易变复杂
任务编排 ❌ 一般 ✅ 非常强
异常处理 try-catch exceptionally / handle
适合场景 后台任务、接口触发 并行计算 / 流式处理
三、最关键的一点(90% 的坑)
❌ CompletableFuture 默认线程池是:
ForkJoinPool.commonPool()

问题:

❌ 和 JVM 里所有 CompletableFuture 共用

❌ 容易被 CPU 密集任务拖死

❌ 和 Spring 事务、日志 MDC、SecurityContext 无关

👉 在 Web 后台 / 微服务 中,不推荐直接用默认写法

四、如果你非要用 CompletableFuture,正确姿势是这样
✔ 指定线程池(否则不如不用)
CompletableFuture.runAsync(
() -> {
// 业务逻辑
},
pasaExecutor // Spring 注入的线程池
);

这样 本质上和 @Async 是一回事

五、结合你现在这个业务:该选哪个?
你的场景回顾

点击按钮 → 调 DA 接口

不关心返回值

不阻塞接口

需要日志、状态、可控线程

✅ 最优解(你现在的)
@Async
public void runTaskAsync(…) { … }

这是标准后台任务写法,没有任何问题

六、什么时候 CompletableFuture 更适合?
适合 CompletableFuture 的典型场景
CompletableFuture f1 = …
CompletableFuturef2 = …

CompletableFuture result =
f1.thenCombine(f2, (a, b) -> …)
.thenApply(…)
.exceptionally(…)

✔ 并行查询
✔ 聚合结果
✔ 链式处理
✔ 有返回值

👉 偏“计算 / 编排”

七、一句话结论

🔥 Spring 项目中:

接口触发、后台执行 → @Async

并行计算、结果编排 → CompletableFuture + 自定义线程池

❌ 永远不要在 Web 项目里裸用 CompletableFuture.supplyAsync()

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 20:56:28

什么是Agentic AI?通俗解释为什么企业都在做智能体

如果你最近频繁听到一个词——Agentic AI(自主式人工智能),但又隐约觉得它不像是“又一个AI概念”,那你的直觉是对的。我先给一个结论式判断:Agentic AI不是AI的新功能,而是企业用AI的“新方式”。它标志着…

作者头像 李华
网站建设 2026/10/19 5:31:37

微网优化调度:Matlab + Yalmip 实现之旅

微网优化调度matlab 采用matlabyalmip编制含分布式和储能的微网优化模型,程序采用15分钟为采集节点,利用cplex求解,程序考虑发电机的启停约束,程序运行可靠在能源领域不断发展的当下,微网优化调度成为了热门话题。今天…

作者头像 李华
网站建设 2026/10/19 5:31:37

2025年12月23日 - 计算机组成原理

1、早期冯诺依曼机特点:计算机有五大部件组成;指令和数据以同等地位存在于存储器,可按地址寻址指令和数据用二进制表示;指令由操作码和地址码组成;存储程序;以运算器为中心。2、现代计算机的结构计算机组成…

作者头像 李华
网站建设 2026/10/19 9:28:16

眼调节训练灯是什么?为什么能防控近视的?

在近视防控需求日益迫切的当下,眼调节训练灯逐渐进入大众视野。很多人会疑惑,这款看似普通的台灯,究竟是什么?又为何能在日常使用中实现近视防控?一、眼调节训练灯的核心定义:并非普通台灯,而是…

作者头像 李华
网站建设 2026/10/21 3:28:00

云服务器架构演进:从虚拟化到容器化与无服务器的跨越

云服务器架构演进:从虚拟化到容器化与无服务器的跨越云服务器的技术架构经历了三次重大变革。第一阶段以虚拟化技术为核心,通过Hypervisor将物理服务器划分为多个虚拟机(VM),实现资源隔离与弹性分配。某电商企业早期采…

作者头像 李华
网站建设 2026/10/21 12:02:48

UKB数据库/RAP平台批量下载数据教程

使用 Table Exporter方法 第一步: 通过在本地终端(请确保你的机器上安装了dx-toolkit)或ttyd终端,执行以下命令,获取包含你数据集中所有可用数据字段的文件: dx extract_dataset project-xxxx:record-yyyy …

作者头像 李华