本人免費整理了Java高級資料,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并發(fā)分布式等教程,一共30G,需要自己領(lǐng)取。
公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴(yán)謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出海城免費做網(wǎng)站回饋大家。
傳送門:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q
異步用法
@EnableAsync 注解
@Async 注解
明確指定執(zhí)行器
管理 @Async 的異常
@EnableAsync
注解要使用?@Async
,首先需要使用?@EnableAsync
注解開啟 Spring Boot 中的異步特性。
@Configuration @EnableAsync public?class?AppConfig?{ }
更詳細的配置說明,可以參考:AsyncConfigurer
@Async
注解(1)無入?yún)o返回值方法
您可以用?@Async
注解修飾方法,這表明這個方法是異步方式調(diào)用。換句話說,程序在調(diào)用此方法時會立即返回,而方法的實際執(zhí)行發(fā)生在已提交給 Spring?TaskExecutor
的任務(wù)中。在最簡單的情況下,您可以將注解應(yīng)用于返回 void 的方法,如以下示例所示:
@Async void?doSomething()?{ ????//?this?will?be?executed?asynchronously }
(2)有入?yún)o返回值方法
與使用?@Scheduled
注釋注釋的方法不同,這些方法可以指定參數(shù),因為它們在運行時由調(diào)用者以“正?!狈绞秸{(diào)用,而不是由容器管理的調(diào)度任務(wù)調(diào)用。例如,以下代碼是?@Async
注解的合法應(yīng)用:
@Async void?doSomething(String?s)?{ ????//?this?will?be?executed?asynchronously }
(3)有入?yún)⒂蟹祷刂捣椒?/p>
甚至可以異步調(diào)用返回值的方法。但是,這些方法需要具有?Future
類型的返回值。這仍然提供了異步執(zhí)行的好處,以便調(diào)用者可以在調(diào)用?Future
上的?get()
之前執(zhí)行其他任務(wù)。以下示例顯示如何在返回值的方法上使用@Async
:
@Async Future?returnSomething(int?i)?{ ????//?this?will?be?executed?asynchronously }
@Async
不能與生命周期回調(diào)一起使用,例如?@PostConstruct
。
要異步初始化 Spring bean,必須使用單獨的初始化 Spring bean,然后在目標(biāo)上調(diào)用?@Async
帶注釋的方法,如以下示例所示:
public?class?SampleBeanImpl?implements?SampleBean?{ ????@Async ????void?doSomething()?{ ????????//?... ????} } public?class?SampleBeanInitializer?{ ????private?final?SampleBean?bean; ????public?SampleBeanInitializer(SampleBean?bean)?{ ????????this.bean?=?bean; ????} ????@PostConstruct ????public?void?initialize()?{ ????????bean.doSomething(); ????} }
默認情況下,在方法上指定?@Async
時,使用的執(zhí)行器是在啟用異步支持時配置的執(zhí)行器,即如果使用 XML 或?AsyncConfigurer
實現(xiàn)(如果有),則為“annotation-driven”元素。但是,如果需要指示在執(zhí)行給定方法時應(yīng)使用默認值以外的執(zhí)行器,則可以使用?@Async
注解的 value 屬性。以下示例顯示了如何執(zhí)行此操作:
@Async("otherExecutor") void?doSomething(String?s)?{ ????//?this?will?be?executed?asynchronously?by?"otherExecutor" }
在這種情況下,“otherExecutor”可以是 Spring 容器中任何 Executor bean 的名稱,也可以是與任何 Executor 關(guān)聯(lián)的限定符的名稱(例如,使用?
元素或 Spring 的?@Qualifier
注釋指定) )。
@Async
的異常當(dāng)?@Async
方法的返回值類型為?Future
型時,很容易管理在方法執(zhí)行期間拋出的異常,因為在調(diào)用?get
結(jié)果時會拋出此異常。但是,對于返回值類型為 void 型的方法,異常不會被捕獲且無法傳輸。您可以提供?AsyncUncaughtExceptionHandler
來處理此類異常。以下示例顯示了如何執(zhí)行此操作:
public?class?MyAsyncUncaughtExceptionHandler?implements?AsyncUncaughtExceptionHandler?{ ????@Override ????public?void?handleUncaughtException(Throwable?ex,?Method?method,?Object...?params)?{ ????????//?handle?exception ????} }
默認情況下,僅記錄異常。您可以使用?AsyncConfigurer
或?
XML元素定義自定義?AsyncUncaughtExceptionHandler
。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。