工作小总结&小工具类

记录在Spring boot项目中使用@Async注解,但是没有生效的排查。

背景:我的代码中:查看执行结果:页面F12查看耗时:为什么异步提交耗时这么久?您观察到的耗时问题非常关键!异步提交耗时:7962 意味着异步方法实际上是在主线程同步执行的,并没有真正异步化。这通常是由SpringAOP的代理机制失效引起的。根本原因分析方法内部自调用(Self-Invocation)失效@Async 是基于SpringAOP动态代理实现的。只有当通过代理对象调用

背景:

我的代码中:

查看执行结果:

页面F12查看耗时:

为什么异步提交耗时这么久?

您观察到的耗时问题非常关键!异步提交耗时:7962 意味着异步方法实际上是在主线程同步执行的,并没有真正异步化。这通常是由 Spring AOP 的代理机制失效引起的。

根本原因分析

  1. 方法内部自调用 (Self-Invocation) 失效

    • @Async 是基于 Spring AOP 动态代理实现的。

    • 只有当通过代理对象调用方法时,AOP 拦截器才会生效,从而将任务提交给线程池。

    • 如果在同一个类中,方法 A 直接调用方法 B(即使 B 标记了 @Async),调用的是原始对象的方法,绕过了代理,导致异步失效,变成

原创不易,完成人机校验,阅读全文

相关推荐