Spring中的異步方法@Async失效的原因詳解
Spring中的異步方法@Async失效的原因
1.沒有在配置類中開啟@EnableAsync注解,導致異步方法失效。
@Configuration @EnableAsync // 開啟異步支持 public class AppConfig { // ... }
2.異步方法必須要被其它類中的方法調(diào)用,如果在同一個類中調(diào)用,異步方法仍然是同步執(zhí)行的。
@Service public class DemoService { @Async public void asyncMethod() { // ... } public void callAsyncMethod() { asyncMethod(); // 異步方法不會被異步執(zhí)行 } } @Service public class CallerService { @Autowired private DemoService demoService; public void callAsyncMethod() { demoService.asyncMethod(); // 異步方法會被異步執(zhí)行 } }
3.異步方法必須要在public方法中被調(diào)用,如果被同類中的private方法調(diào)用,異步方法仍然是同步執(zhí)行的。
@Service public class DemoService { @Async public void asyncMethod() { // ... } public void callAsyncMethod() { privateMethod(); // 異步方法不會被異步執(zhí)行 } private void privateMethod() { asyncMethod(); // 異步方法不會被異步執(zhí)行 } }
4.異步方法必須是非靜態(tài)方法,如果是靜態(tài)方法,異步方法仍然是同步執(zhí)行的。
@Service public class DemoService { @Async public static void asyncMethod() { // ... } public void callAsyncMethod() { asyncMethod(); // 異步方法不會被異步執(zhí)行 } }
5.異步方法必須要有返回值,如果沒有返回值,異步方法仍然是同步執(zhí)行的。
@Service public class DemoService { @Async public void asyncMethod() { // ... } @Async public Future<String> asyncMethodWithResult() { // ... return new AsyncResult<>("result"); } } @Service public class CallerService { @Autowired private DemoService demoService; public void callAsyncMethod() { demoService.asyncMethod(); // 異步方法不會被異步執(zhí)行 Future<String> future = demoService.asyncMethodWithResult(); // 異步方法會被異步執(zhí)行 } }
到此這篇關(guān)于Spring中的異步方法@Async失效的原因詳解的文章就介紹到這了,更多相關(guān)Spring的@Async失效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springcloud gateway如何實現(xiàn)路由和負載均衡
這篇文章主要介紹了springcloud gateway如何實現(xiàn)路由和負載均衡的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Java Swing JToggleButton開關(guān)按鈕的實現(xiàn)
這篇文章主要介紹了Java Swing JToggleButton開關(guān)按鈕的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12Spring框架設(shè)值注入操作實戰(zhàn)案例分析
這篇文章主要介紹了Spring框架設(shè)值注入操作,結(jié)合具體實例形式分析了spring框架設(shè)值注入相關(guān)實現(xiàn)與使用方法,需要的朋友可以參考下2019-11-11淺析Java?NIO?直接緩沖區(qū)和非直接緩沖區(qū)
本篇文章主要為大家介紹了Java?NIO?中直接緩沖區(qū)和非直接緩沖區(qū)的定義以及使用流程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-11-11一文解決System.in關(guān)閉后無法再繼續(xù)使用流的問題
這篇文章主要給大家介紹如何解決System.in關(guān)閉后無法再繼續(xù)使用流的問題,文中有詳細的解決方法和代碼示例,具有一定的參考價值,需要的朋友可以參考下2023-07-07詳解備忘錄模式及其在Java設(shè)計模式編程中的實現(xiàn)
這篇文章主要介紹了詳解備忘錄模式及其在Java設(shè)計模式編程中的實現(xiàn),備忘錄模式數(shù)據(jù)的存儲過程中應(yīng)當注意淺拷貝和深拷貝的問題,需要的朋友可以參考下2016-04-04