最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Retry重試框架的使用講解

 更新時間:2023年01月06日 14:36:34   作者:記億揺晃著的那天  
重試的使用場景比較多,比如調用遠程服務時,由于網(wǎng)絡或者服務端響應慢導致調用超時,此時可以多重試幾次。用定時任務也可以實現(xiàn)重試的效果,但比較麻煩,用Spring Retry的話一個注解搞定所有,感興趣的可以了解一下

重試框架Spring-Retry是什么

Spring Retry是一個在Spring框架中以聲明方式重試操作的框架。 它提供了對Spring框架現(xiàn)有重試支持的擴展,包括RetryTemplate和RetryOperations接口。 Spring Retry提供了幾個高級抽象,例如@Retryable、@Recover和RecoveryCallback,這些抽象允許您聲明性地指定應該重試哪些方法以及如何處理重試失敗。 它還支持使用SpringRestTemplate重試HTTP請求。

Spring Retry在您希望在操作失敗時自動重試的情況下非常有用,無論是由于暫時錯誤還是更持久的失敗。 這在重試操作可能會成功的情況下非常有用,并且可以避免您在代碼中手動實現(xiàn)重試邏輯。

Spring-Retry如何使用

SpringRetry是一個自動重試失敗操作的框架。 它可用于自動重試由于暫時錯誤(如臨時網(wǎng)絡中斷、速率限制和HTTP 500錯誤)而失敗的操作。

以下是如何使用Spring Retry自動重試失敗操作的示例:

1、將SpringRetry依賴項添加到項目中。 例如,如果您正在使用Maven,可以將以下依賴項添加到pom.xml文件中:

<dependency>
  <groupId>org.springframework.retry</groupId>
  <artifactId>spring-retry</artifactId>
  <version>1.2.5.RELEASE</version>
</dependency>

2、用@Retryable注釋您的方法。 這會告訴Spring在方法失敗時自動重試該方法。 您可以指定應觸發(fā)重試的異常類型,以及嘗試的最大重試次數(shù)。 例如:

@Retryable(value = {ConnectException.class, SocketException.class}, maxAttempts = 3)
public void doSomething() throws Exception {
    // code to execute
}

3、用@Recover注釋您的方法。 這告訴Spring如果所有重試都失敗了該怎么辦。 @Recover方法應具有與@Retryable方法相同的簽名,并為導致失敗的異常添加一個附加參數(shù)。 例如:

@Recover
public void recover(ConnectException e) {
    // code to execute if all retries fail
}

4、在應用程序上下文中啟用Spring Retry。 您可以通過將@EnableRetry注釋添加到配置類中,或者通過將<retry:annotation-driven/>元素添加到XML配置中來實現(xiàn)這一點。

  @EnableRetry
  public class ErpApplication {
    public static void main(String[] args) {
        SpringApplication.run(ErpApplication.class, args);
    }
    }

就是這樣! 如果doSomething()方法因ConnectException或SocketException而失敗,Spring現(xiàn)在將自動重試,最多重試3次。 如果所有重試都失敗,將調用recover()方法。

測試

service層

 @Retryable(value = {NullPointerException.class}, maxAttempts = 3, backoff = @Backoff(delay = 5000L, multiplier = 2))
    public void retryableMethod() {
        System.out.println("hello world");
        throw new NullPointerException("空指針異常");
    }

測試方法

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class TestRetry {
    @Resource
    private SalesServiceImpl salesServiceImpl;
    @Test
    public void test001() {
        salesServiceImpl.retryableMethod();
    }
}

運行效果

hello world
hello world
hello world
java.lang.NullPointerException: 空指針異常

屬性說明

@Retryable 是一個 Spring 注解,它可以在方法級別使用,用于聲明該方法是可以重試的。當使用 @Retryable 注解標注的方法拋出異常時,Spring 會自動重試該方法。這對于一些具有一定的不確定性的操作,例如遠程調用或者使用外部系統(tǒng)時非常有用,因為這些操作很可能會失敗。

你可以使用 @Retryable 注解的 value 屬性指定應該重試的異常類型,也可以使用 include 和 exclude 屬性來指定應該重試的異常類型。你還可以使用 maxAttempts 屬性指定最大重試次數(shù),使用 backoff 屬性指定重試之間的間隔,使用 multiplier 屬性指定每次重試之間間隔時間的增長倍數(shù)。

例如,下面的代碼聲明了一個可以重試的方法,在方法拋出 ServiceUnavailableException 時會重試三次,重試之間的間隔是 1000 毫秒,每次重試之間的間隔會翻倍:

@Retryable(value = ServiceUnavailableException.class, maxAttempts = 3, backoff = @Backoff(delay = 1000, multiplier = 2))
public void someMethod() {
  // method implementation
}

重試全部失敗的回調方法

@Recover注解指定重試全部失敗的回調方法

@Retryable(value = {NullPointerException.class}, maxAttempts = 3, backoff = @Backoff(delay = 5000L, multiplier = 2))
    public void retryableMethod() {
        System.out.println("hello world");
        throw new NullPointerException("空指針異常");
    }
    @Recover
    public void recover() {
        System.out.println("重試全部失敗的回調方法");
    }

測試結果

hello world
hello world
hello world
重試全部失敗的回調方法

到此這篇關于Spring Retry重試框架的使用講解的文章就介紹到這了,更多相關Spring Retry重試內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用springboot的jar包能夠以service方式啟動

    使用springboot的jar包能夠以service方式啟動

    這篇文章主要介紹了使用springboot的jar包能夠以service方式啟動,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 詳解Java中的靜態(tài)代理模式

    詳解Java中的靜態(tài)代理模式

    這篇文章主要為大家介紹了Java中的靜態(tài)代理模式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-12-12
  • Java接口異步調用優(yōu)化技巧詳解

    Java接口異步調用優(yōu)化技巧詳解

    本文詳細介紹了在Java開發(fā)中,如何通過異步調用等技巧來優(yōu)化接口的性能,有效避免阻塞和提高并發(fā)處理能力,提升系統(tǒng)的穩(wěn)定性和響應速度
    2023-05-05
  • Java 實戰(zhàn)項目之家居購物商城系統(tǒng)詳解流程

    Java 實戰(zhàn)項目之家居購物商城系統(tǒng)詳解流程

    讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實現(xiàn)一個家居購物商城系統(tǒng),大家可以在過程中查缺補漏,提升水平
    2021-11-11
  • Java通過反射,如何動態(tài)修改注解的某個屬性值

    Java通過反射,如何動態(tài)修改注解的某個屬性值

    這篇文章主要介紹了Java通過反射,動態(tài)修改注解的某個屬性值操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • JavaWeb項目中dll文件動態(tài)加載方法解析(詳細步驟)

    JavaWeb項目中dll文件動態(tài)加載方法解析(詳細步驟)

    這篇文章主要介紹了JavaWeb項目中dll文件動態(tài)加載方法,步驟詳細,在這里分享給大家,需要的朋友可以了解下。
    2017-09-09
  • Java數(shù)據(jù)結構之快速冪的實現(xiàn)

    Java數(shù)據(jù)結構之快速冪的實現(xiàn)

    快速冪是用來解決求冪運算的高效方式。本文將詳細為大家介紹如何利用Java實現(xiàn)快速冪,以及利用快速冪求解冪運算問題,需要的可以參考一下
    2022-03-03
  • Java中連接Mongodb進行增刪改查的操作詳解

    Java中連接Mongodb進行增刪改查的操作詳解

    MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫,由C++語言編寫,旨在為WEB應用提供可擴展的高性能數(shù)據(jù)存儲解決方案,本文給大家介紹了Java中連接Mongodb進行操作,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2024-06-06
  • Spring Boot console log 格式自定義方式

    Spring Boot console log 格式自定義方式

    這篇文章主要介紹了Spring Boot console log 格式自定義方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 使用@RequiredArgsConstructor注解來取代繁瑣的@Autowrired

    使用@RequiredArgsConstructor注解來取代繁瑣的@Autowrired

    有了@RequiredArgsConstructor注解,我們就可以減少@Autowired的書寫,本文主要介紹了使用@RequiredArgsConstructor注解來取代繁瑣的@Autowrired,感興趣的可以了解一下
    2022-04-04

最新評論

龙井市| 英德市| 镇赉县| 左权县| 开封市| 元江| 迭部县| 尚志市| 临洮县| 苏尼特右旗| 兴安盟| 泰和县| 高唐县| 巴青县| 南郑县| 枞阳县| 尉氏县| 孟州市| 班玛县| 阜城县| 连城县| 扎兰屯市| 黑龙江省| 武清区| 武功县| 龙州县| 当涂县| 大名县| 卓尼县| 资兴市| 霍林郭勒市| 海兴县| 封开县| 淮北市| 金阳县| 灌南县| 洛浦县| 定日县| 郯城县| 准格尔旗| 元阳县|