SpringCloud 微服務中 @Async 注解自定義線程池 引發的aop 問題


背景


在 使用springCloud 的@Async注解來做異步操作時,想自定義其線程池。

 

引發問題


自定義完線程池后,發現代碼里並沒有使用自定義線程池里的線程,於是新建一個demo工程,一樣的配置代碼,又測試了一下,發現自定義線程池竟然起作用了,。。。
經過排查,發現項目里對加@Async注解的方法調用是在同一個類里被調用的,即異步方法是被同一個類中的另一個方法調用的,由此想起以前在使用Cacheale因為同類調用導致緩存不起作用。

 

原因


spring 的這些注解是使用spring aop來動態代理的,同類調用時,我們是使用當前對象this來調用方法,而不是代理對象,因此aop無法生效。

 

解決


將加注解的方法單獨封裝到一個類,然后在另一個類里調用方法,這樣就避免了同類調用導致的問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM