背景
在 使用springCloud 的@Async注解來做異步操作時,想自定義其線程池。
引發問題
自定義完線程池后,發現代碼里並沒有使用自定義線程池里的線程,於是新建一個demo工程,一樣的配置代碼,又測試了一下,發現自定義線程池竟然起作用了,。。。
經過排查,發現項目里對加@Async注解的方法調用是在同一個類里被調用的,即異步方法是被同一個類中的另一個方法調用的,由此想起以前在使用Cacheale因為同類調用導致緩存不起作用。
原因
spring 的這些注解是使用spring aop來動態代理的,同類調用時,我們是使用當前對象this來調用方法,而不是代理對象,因此aop無法生效。
解決
將加注解的方法單獨封裝到一個類,然后在另一個類里調用方法,這樣就避免了同類調用導致的問題。