在實際的項目中,對於一些用時比較長的代碼片段或者函數,我們可以采用異步的方式來執行,這樣就不會影響整體的流程了。
比如我在一個用戶請求中需要上傳一些文件,但是上傳文件的耗時會相對來說比較長,這個時候如果上傳文件的成功與否不影響主流程的話,就可以把上傳文件的操作異步化,
在spring boot中比較常見的方式就是把要異步執行的代碼片段封裝成一個函數,然后在函數頭使用@Async注解,就可以實現代碼的異步執行(當然首先得在啟動類上加上@EnableAsync注解了)。
具體的使用方式這里我也就不再演示了,網上教大家使用@Async的很多。
今天我要講的並不是怎么去使用@Async注解,而是講我在實際開發過程中遇到的一個坑,希望你不要再犯。
首先,再明確一點,學習一個知識,第一步是找到相應的官網或是比較權威的網站。
那么這個坑是什么呢?就是如果你在同一個類里面調用一個自己的被@Async修飾的函數時,這個函數將不會被異步執行,它依然是同步執行的!
所以你如果沒有經過測試就想當然的以為只要在方法頭加上@Async就能達到異步的效果,那么你很有可能會得到相反的效果。這個是很要命的。