亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring Retry重試框架的使用講解

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

重試框架Spring-Retry是什么

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

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

Spring-Retry如何使用

SpringRetry是一個自動重試失敗操作的框架。 它可用于自動重試由于暫時錯誤(如臨時網(wǎng)絡(luò)中斷、速率限制和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在方法失敗時自動重試該方法。 您可以指定應(yīng)觸發(fā)重試的異常類型,以及嘗試的最大重試次數(shù)。 例如:

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

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

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

4、在應(yīng)用程序上下文中啟用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次。 如果所有重試都失敗,將調(diào)用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 注解,它可以在方法級別使用,用于聲明該方法是可以重試的。當(dāng)使用 @Retryable 注解標(biāo)注的方法拋出異常時,Spring 會自動重試該方法。這對于一些具有一定的不確定性的操作,例如遠(yuǎn)程調(diào)用或者使用外部系統(tǒng)時非常有用,因為這些操作很可能會失敗。

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

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

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

重試全部失敗的回調(diào)方法

@Recover注解指定重試全部失敗的回調(diào)方法

@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("重試全部失敗的回調(diào)方法");
    }

測試結(jié)果

hello world
hello world
hello world
重試全部失敗的回調(diào)方法

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

相關(guān)文章

  • 基于spring@aspect注解的aop實現(xiàn)過程代碼實例

    基于spring@aspect注解的aop實現(xiàn)過程代碼實例

    這篇文章主要介紹了基于spring@aspect注解的aop實現(xiàn)過程代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • springboot集成kafka消費手動啟動停止操作

    springboot集成kafka消費手動啟動停止操作

    這篇文章主要介紹了springboot集成kafka消費手動啟動停止操作,本文給大家介紹項目場景及解決分析,結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Spring Boot右鍵maven build成功但是直接運行main方法出錯的解決方案

    Spring Boot右鍵maven build成功但是直接運行main方法出錯的解決方案

    這篇文章主要介紹了Spring Boot-右鍵maven build成功但是直接運行main方法出錯的解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Spring?Boot和Vue前后端分離項目架構(gòu)的全過程

    Spring?Boot和Vue前后端分離項目架構(gòu)的全過程

    前后端分離是目前互聯(lián)網(wǎng)開發(fā)中比較廣泛使用的開發(fā)模式,主要是將前端和后端的項目業(yè)務(wù)進(jìn)行分離,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot和Vue前后端分離項目架構(gòu)的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • springboot Quartz動態(tài)修改cron表達(dá)式的方法

    springboot Quartz動態(tài)修改cron表達(dá)式的方法

    這篇文章主要介紹了springboot Quartz動態(tài)修改cron表達(dá)式的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • SpringBoot Bean花式注解方法示例下篇

    SpringBoot Bean花式注解方法示例下篇

    這篇文章主要介紹了SpringBoot Bean花式注解方法,很多時候我們需要根據(jù)不同的條件在容器中加載不同的Bean,或者根據(jù)不同的條件來選擇是否在容器中加載某個Bean
    2023-02-02
  • openGauss數(shù)據(jù)庫JDBC環(huán)境連接配置的詳細(xì)過程(Eclipse)

    openGauss數(shù)據(jù)庫JDBC環(huán)境連接配置的詳細(xì)過程(Eclipse)

    這篇文章主要介紹了openGauss數(shù)據(jù)庫JDBC環(huán)境連接配置(Eclipse),演示基于JDBC開發(fā)的主要步驟,會涉及創(chuàng)建數(shù)據(jù)庫、創(chuàng)建表、插入數(shù)據(jù)等,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Java中HashMap的初始容量設(shè)置方式

    Java中HashMap的初始容量設(shè)置方式

    這篇文章主要介紹了Java中HashMap的初始容量設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • feign 調(diào)用第三方服務(wù)中部分特殊符號未轉(zhuǎn)義問題

    feign 調(diào)用第三方服務(wù)中部分特殊符號未轉(zhuǎn)義問題

    這篇文章主要介紹了feign 調(diào)用第三方服務(wù)中部分特殊符號未轉(zhuǎn)義問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 淺談Redis的key和value大小限制

    淺談Redis的key和value大小限制

    這篇文章主要介紹了淺談Redis的key和value大小限制,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11

最新評論