Spring Retry使用說(shuō)明

Spring Retry提供了操作重試的功能,在網(wǎng)絡(luò)不穩(wěn)定的情況下,重試功能是比較重要的必備項(xiàng)。Spring Retry可以讓我們自定義重試策略,回退策略,重試狀態(tài)處理。

使用

1 添加依賴,默認(rèn)情況下在Spring Boot中有依賴項(xiàng)。

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

          <!--  Spring Retry使用了AOP -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.2</version>
        </dependency>

2 配置RetryTemplate,重試策略,回退策略?;蛘?strong>監(jiān)聽器

   @Bean
    public RetryTemplate retryTemplate() {
        RetryTemplate retryTemplate = new RetryTemplate();

        // 每次回退固定的時(shí)間
//        FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
//        fixedBackOffPolicy.setBackOffPeriod(2000l);

        // 指數(shù)回退,第一次回退0.2s,第二次回退0.4s
        ExponentialBackOffPolicy exponentialBackOffPolicy = new ExponentialBackOffPolicy();
        exponentialBackOffPolicy.setInitialInterval(200L);
        exponentialBackOffPolicy.setMultiplier(2);
        retryTemplate.setBackOffPolicy(exponentialBackOffPolicy);

        // 重試策略,有多種重試策略
        SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
        retryPolicy.setMaxAttempts(3);
        retryTemplate.setRetryPolicy(retryPolicy);

        retryTemplate.setThrowLastExceptionOnExhausted(false);

        return retryTemplate;
    }

3 使用重試功能

     retryTemplate.execute((RetryCallback<Void, RuntimeException>) context -> {
            // 這里寫我們的業(yè)務(wù)代碼
            // ....
        
            // 模擬拋出異常
            throw new RuntimeException("異常");
        });

4 可以開啟日志查看效果

logging.level.org.springframework.retry=debug
1569552787010

注解

  • @Retryable
  • @Recover
  • @Backoff

注意

Spring Retry有一個(gè)缺點(diǎn),其回退策略,默認(rèn)使用的是Thread.sleep方法,會(huì)導(dǎo)致當(dāng)前的線程被阻塞,因此使用的時(shí)候要注意。

最后

簡(jiǎn)單說(shuō)明了下Spring Retry的使用方式,使用簡(jiǎn)單,功能強(qiáng)大。

參考:https://www.baeldung.com/spring-retry

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 原文鏈接:https://docs.spring.io/spring-boot/docs/1.4.x/refere...
    pseudo_niaonao閱讀 4,746評(píng)論 0 9
  • 準(zhǔn)備好好看看一下spring-cloud的源碼,把其中實(shí)現(xiàn)的原理搞清楚,而不是僅僅會(huì)配幾個(gè)注解,會(huì)配幾個(gè)參數(shù),把“...
    沉寂之舟閱讀 14,654評(píng)論 0 6
  • 要加“m”說(shuō)明是MB,否則就是KB了. -Xms:初始值 -Xmx:最大值 -Xmn:最小值 java -Xms8...
    dadong0505閱讀 4,910評(píng)論 0 53
  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981閱讀 15,992評(píng)論 2 11
  • 我說(shuō)今晚月光那么美,你說(shuō)是的 當(dāng)初我們寧愿錯(cuò)也不愿錯(cuò)過。現(xiàn)在我細(xì)想來(lái),為什么我做不到坦然,做不到說(shuō)好的順其自然。心...
    方西fancy閱讀 235評(píng)論 0 0