Spirngboot使用@Async異步調用,出現不異步問題。

問題背景:做項目記日誌時候,由於日誌量較大,爲了不影響業務處理速度,採用異步記日誌的方式,使用@Async註解實現,結果發現不好用,記日誌還是同步的,經過排查發現以下幾個問題。

1、啓動類上開啓註解忘了加。

2、同步方法在同一個工具類中調用的異步方法。

記日誌的工具類中開放一個同步方法,用於處理日誌數據,處理完成後再調用異步發送日誌。這樣處理導致異步註解不生效,爲了解決問題,將處理日誌數據的方法也設置爲異步(加上異步註解)。這樣確實解決了不異步的問題,但是有導致另一個業務上的問題,從業務線程上下文中拿數據時候已經拿不到了:異步之後已經是另一個線程。

3、異步後線程數據無法獲取

爲了解決第三個問題,只能把第二個問題還原,最終想的辦法就是:將異步的方法單獨摘出來放到一個工具類裏,即一個工具類處理數據,再調用另一個工具類異步發送日誌。最終完成異步記日誌。

 

 

以上若有理解錯誤,歡迎大家批評指正,謝謝。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章