记录在Spring boot项目中使用@Async注解,但是没有生效的排查。
背景:我的代码中:查看执行结果:页面F12查看耗时:为什么异步提交耗时这么久?您观察到的耗时问题非常关键!异步提交耗时:7962 意味着异步方法实际上是在主线程同步执行的,并没有真正异步化。这通常是由SpringAOP的代理机制失效引起的。根本原因分析方法内部自调用(Self-Invocation)失效@Async 是基于SpringAOP动态代理实现的。只有当通过代理对象调用
背景:
我的代码中:
查看执行结果:
页面F12查看耗时:
为什么异步提交耗时这么久?
您观察到的耗时问题非常关键!异步提交耗时:7962 意味着异步方法实际上是在主线程同步执行的,并没有真正异步化。这通常是由 Spring AOP 的代理机制失效引起的。
根本原因分析
方法内部自调用 (Self-Invocation) 失效
@Async是基于 Spring AOP 动态代理实现的。只有当通过代理对象调用方法时,AOP 拦截器才会生效,从而将任务提交给线程池。
如果在同一个类中,方法 A 直接调用方法 B(即使 B 标记了
@Async),调用的是原始对象的方法,绕过了代理,导致异步失效,变成
原创不易,完成人机校验,阅读全文
相关推荐
AI编程Trae中使用spring boot启动失败处理工作小总结spring boot项目中handlerinterceptor autowired 为空解决办法工作小总结&小工具类把xxl-job集成到spring boot项目中学习笔录-SPRING BOOTspring boot 中使用mybatis自动生成mapper和dao插件经验分享【已解决】项目中使用websocket的时候,使用Junit自测其他diam提示:webSocket初始化失败怎么办?学习笔录-SPRING BOOT记录一次spring boot和dubbo整合使用的走的坑学习笔录-SPRING BOOTspring boot自动注解引发的错误HM_LEADNEWSSpring boot 基于注解方式配置datasource