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