news 2026/5/16 23:43:36

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/5/6 11:25:15

低功耗蓝牙主机与从机四种数据交流方式

第一种:读取数据流向:主机 → 请求 → 从机 → 响应 → 主机 本质:主机主动查询从机数据的“问答”模式。过程描述:主机发起:主机向从机某个特征的 句柄 发送一个 “读取请求”。从机响应:从机必须回复一个…

作者头像 李华
网站建设 2026/5/16 22:54:00

docker部署elk+filebeat日志收集分析系统

简介 ELK 是由三个开源项目组成的日志管理解决方案,分别是 Elasticsearch、Logstash 和 Kibana。这三个工具协同工作,提供强大的日志收集、处理、存储和可视化能力。通常,ELK 被用于大规模的日志分析和数据监控,帮助开发人员和运…

作者头像 李华
网站建设 2026/5/10 3:36:30

行车记录仪乱码大揭秘:数据恢复不再是难题!

在数字化驾驶时代,行车记录仪已成为车主们不可或缺的行车伴侣,它默默记录着每一次出行的细节,为安全驾驶提供有力保障。然而,当行车记录仪突然出现乱码,那些珍贵的视频资料瞬间变得难以辨识,这无疑给车主们…

作者头像 李华
网站建设 2026/5/3 5:05:11

翱翔未来:为何这家eVTOL服务商值得关注

一架造型前卫的电动飞行器在成都上空轻盈起飞,没有震耳的噪音,只有轻微的低鸣,很快融入了都市的天际线。傍晚高峰时段,成都天府软件园附近,一架造型前卫的电动飞行器轻盈起飞,没有震耳的噪音,只…

作者头像 李华
网站建设 2026/5/16 2:46:24

java基于Springboot卖家乐二手电子产品回收系统-vue

目录已开发项目效果实现截图关于博主开发技术介绍核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已开发…

作者头像 李华