SpringCloud 微服务中 @Async 注解自定义线程池 引发的aop 问题

背景


在 使用springCloud 的@Async注解来做异步操作时,想自定义其线程池。

 

引发问题


自定义完线程池后,发现代码里并没有使用自定义线程池里的线程,于是新建一个demo工程,一样的配置代码,又测试了一下,发现自定义线程池竟然起作用了,。。。
经过排查,发现项目里对加@Async注解的方法调用是在同一个类里被调用的,即异步方法是被同一个类中的另一个方法调用的,由此想起以前在使用Cacheale因为同类调用导致缓存不起作用。

 

原因


spring 的这些注解是使用spring aop来动态代理的,同类调用时,我们是使用当前对象this来调用方法,而不是代理对象,因此aop无法生效。

 

解决


将加注解的方法单独封装到一个类,然后在另一个类里调用方法,这样就避免了同类调用导致的问题。

 

posted @   天王星天  阅读(1300)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2015-11-12 WPF 快速制作可拖拽的对象和窗体
2015-11-12 MEF——.NET中值得体验的精妙设计
2015-11-12 OOP、DI、IOC的关系
2015-11-12 Unity和Mef的比较
2015-11-12 INavigationAware接口示例
点击右上角即可分享
微信分享提示