前言 最近星球中有位小伙伴問了我一個問題:他在項目某個方法使用@Async注解,但是還是該方法還是同步執(zhí)行了,異步不起作用,到底是什么原因呢? 偽代碼如下: @Slf4j @Service public class UserService { @Async public void async(Str
最近有小伙伴向我提出了一個問題:他在項目某個方法使用了
@Async
注解,但是該方法仍然同步執(zhí)行,異步?jīng)]有生效。這讓我思考了一下,今天我將總結(jié)@Async注解失效的9種情景,希望對你有所幫助。
1. 未使用@EnableAsync注解
在Spring中啟用@Async注解異步功能,需要在項目的啟動類或配置類上使用
@EnableAsync
注解。例如:
@EnableAsync
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@EnableAsync
注解相當(dāng)于一個開關(guān),控制是否開啟
@Async
注解異步功能,默認是關(guān)閉的。如果未使用@EnableAsync注解,則@Async注解異步功能無法生效。
2. 內(nèi)部方法調(diào)用
在日常開發(fā)中,我們經(jīng)常需要在一個方法中調(diào)用另一個方法。如果在Service類中的一個方法中調(diào)用另一個方法,則@Async注解的異步功能會失效。
3. 方法非public
在Java中有4種權(quán)限修飾符,例如public、private、protected和默認修飾符。如果在Service類中的方法權(quán)限修飾符定義錯誤,例如定義成private,也會導(dǎo)致@Async注解的異步功能失效。
4. 方法返回值錯誤
如果@Async注解的異步方法的返回值不是void或Future類型,也會導(dǎo)致異步功能失效。
5. 方法用static修飾了
使用@Async注解聲明的方法必須是能被重寫的,而static修飾的方法是不允許被重寫的,因此static修飾的方法會導(dǎo)致@Async注解的異步功能失效。
6. 方法用final修飾
使用final關(guān)鍵字修飾的方法也會導(dǎo)致@Async注解的異步功能失效。
7. 業(yè)務(wù)類沒加@Service注解
如果Service類沒有使用@Service、@Component或者@Controller等注解聲明,該類不會被Spring管理,因此也就無法使用Spring的異步功能。
8. 自己new的對象
在項目中自己new的對象不會被Spring管理,因此也就無法使用Spring的異步功能。
9. Spring無法掃描異步類
如果@ComponentScan注解定義的路徑?jīng)]有包含你新加的Service類的路徑,@Async注解異步的功能也會失效。
最后說一句(求關(guān)注,別白嫖我)
如果這篇文章對您有所幫助,或者有所啟發(fā)的話,幫忙掃描下發(fā)二維碼關(guān)注一下,您的支持是我堅持寫作最大的動力。求一鍵三連:點贊、轉(zhuǎn)發(fā)、在看。關(guān)注蘇三的公眾號:【蘇三說技術(shù)】,在公眾號中回復(fù):面試、代碼神器、開發(fā)手冊、時間管理有超贊的粉絲福利,另外回復(fù):加群,可以跟很多BAT大廠的前輩交流和學(xué)習(xí)。
小編推薦閱讀機器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實現(xiàn)對象集合與DataTable的相互轉(zhuǎn)換
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細使用
閱讀Java代理模式:靜態(tài)代理和動態(tài)代理的對比分析
閱讀Win11筆記本“自動管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]
湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2025 haote.com 好特網(wǎng)