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

背景


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

 

引发问题


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

 

原因


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

 

解决


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

 

posted @ 2019-11-12 11:28  天王星天  阅读(1298)  评论(0编辑  收藏  举报