亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot 中如何支持異步方法

發布時間:2020-10-18 19:10:47 來源:網絡 閱讀:302 作者:Java筆記丶 欄目:編程語言
  • 本人免費整理了Java高級資料,涵蓋了Java、RedisMongoDBMySQL、Zookeeper、Spring Cloud、Dubbo高并發分布式等教程,一共30G,需要自己領取。
    傳送門:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q

異步用法

@EnableAsync 注解

@Async 注解

明確指定執行器

管理 @Async 的異常

異步用法

@EnableAsync?注解

要使用?@Async,首先需要使用?@EnableAsync?注解開啟 Spring Boot 中的異步特性。

@Configuration
@EnableAsync
public?class?AppConfig?{
}

更詳細的配置說明,可以參考:AsyncConfigurer

@Async?注解

支持的用法

(1)無入參無返回值方法

您可以用?@Async?注解修飾方法,這表明這個方法是異步方式調用。換句話說,程序在調用此方法時會立即返回,而方法的實際執行發生在已提交給 Spring?TaskExecutor?的任務中。在最簡單的情況下,您可以將注解應用于返回 void 的方法,如以下示例所示:

@Async
void?doSomething()?{
????//?this?will?be?executed?asynchronously
}

(2)有入參無返回值方法

與使用?@Scheduled?注釋注釋的方法不同,這些方法可以指定參數,因為它們在運行時由調用者以“正常”方式調用,而不是由容器管理的調度任務調用。例如,以下代碼是?@Async?注解的合法應用:

@Async
void?doSomething(String?s)?{
????//?this?will?be?executed?asynchronously
}

(3)有入參有返回值方法

甚至可以異步調用返回值的方法。但是,這些方法需要具有?Future?類型的返回值。這仍然提供了異步執行的好處,以便調用者可以在調用?Future?上的?get()?之前執行其他任務。以下示例顯示如何在返回值的方法上使用@Async

@Async
Future<String>?returnSomething(int?i)?{
????//?this?will?be?executed?asynchronously
}

不支持的用法

@Async?不能與生命周期回調一起使用,例如?@PostConstruct

要異步初始化 Spring bean,必須使用單獨的初始化 Spring bean,然后在目標上調用?@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?時,使用的執行器是在啟用異步支持時配置的執行器,即如果使用 XML 或?AsyncConfigurer?實現(如果有),則為“annotation-driven”元素。但是,如果需要指示在執行給定方法時應使用默認值以外的執行器,則可以使用?@Async?注解的 value 屬性。以下示例顯示了如何執行此操作:

@Async("otherExecutor")
void?doSomething(String?s)?{
????//?this?will?be?executed?asynchronously?by?"otherExecutor"
}

在這種情況下,“otherExecutor”可以是 Spring 容器中任何 Executor bean 的名稱,也可以是與任何 Executor 關聯的限定符的名稱(例如,使用?<qualifier>?元素或 Spring 的?@Qualifier?注釋指定) )。

管理?@Async?的異常

當?@Async?方法的返回值類型為?Future?型時,很容易管理在方法執行期間拋出的異常,因為在調用?get?結果時會拋出此異常。但是,對于返回值類型為 void 型的方法,異常不會被捕獲且無法傳輸。您可以提供?AsyncUncaughtExceptionHandler來處理此類異常。以下示例顯示了如何執行此操作:

public?class?MyAsyncUncaughtExceptionHandler?implements?AsyncUncaughtExceptionHandler?{

????@Override
????public?void?handleUncaughtException(Throwable?ex,?Method?method,?Object...?params)?{
????????//?handle?exception
????}
}

默認情況下,僅記錄異常。您可以使用?AsyncConfigurer?或?<task:annotation-driven />XML元素定義自定義?AsyncUncaughtExceptionHandler


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

中牟县| 富源县| 南澳县| 许昌县| 周口市| 博客| 德阳市| 长治市| 苏尼特右旗| 固原市| 南召县| 修文县| 洪洞县| 渑池县| 玉林市| 西吉县| 墨玉县| 吉木萨尔县| 济南市| 莱芜市| 甘南县| 法库县| 西和县| 瑞丽市| 唐河县| 固始县| 濉溪县| 武邑县| 九寨沟县| 禹城市| 文安县| 新龙县| 德惠市| 兴安县| 辽阳市| 剑阁县| 上犹县| 陕西省| 额济纳旗| 宜都市| 紫金县|