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

Spring Retry重試框架的使用講解

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

重試框架Spring-Retry是什么

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

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

Spring-Retry如何使用

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

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

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

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

2、用@Retryable注釋您的方法。 這會(huì)告訴Spring在方法失敗時(shí)自動(dòng)重試該方法。 您可以指定應(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)致失敗的異常添加一個(gè)附加參數(shù)。 例如:

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

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

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

就是這樣! 如果doSomething()方法因ConnectException或SocketException而失敗,Spring現(xiàn)在將自動(dòng)重試,最多重試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();
    }
}

運(yùn)行效果

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

屬性說明

@Retryable 是一個(gè) Spring 注解,它可以在方法級別使用,用于聲明該方法是可以重試的。當(dāng)使用 @Retryable 注解標(biāo)注的方法拋出異常時(shí),Spring 會(huì)自動(dòng)重試該方法。這對于一些具有一定的不確定性的操作,例如遠(yuǎn)程調(diào)用或者使用外部系統(tǒng)時(shí)非常有用,因?yàn)檫@些操作很可能會(huì)失敗。

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

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

@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)文章

最新評論

仁寿县| 宁都县| 延寿县| 南宁市| 华蓥市| 卢龙县| 辛集市| 衡山县| 海口市| 平乐县| 油尖旺区| 临沂市| 济源市| 眉山市| 牟定县| 千阳县| 丰镇市| 许昌县| 汾西县| 淮北市| 凤台县| 怀安县| 浦江县| 乌恰县| 桂阳县| 常州市| 班玛县| 新建县| 廊坊市| 东城区| 玉龙| 五家渠市| 白银市| 班玛县| 石门县| 淮安市| 兰州市| 平原县| 神木县| 荆州市| 探索|