欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot @Retryable注解使用

 更新時間:2024年12月10日 09:54:00   作者:LBL_lin  
SpringBoot提供的@Retryable注解可以方便地實現(xiàn)方法的重試機制,可以在不侵入原有邏輯代碼的方式下,優(yōu)雅地實現(xiàn)重處理功能

前言

在使用第三方接口的時候,一般都會有一些類似登錄客戶端的處理,或者發(fā)送消息這些場景,有時候會出現(xiàn)網絡抖動、連接超時等異常,這時候就需要進行多次重試。

一般如果我們自己實現(xiàn)重試機制,都是使用循環(huán),但是這樣并不優(yōu)雅。

在SpringBoot中已經提供了實現(xiàn)重試機制的功能——@Retryable注解,可以在不侵入原有邏輯代碼的方式下,優(yōu)雅的實現(xiàn)重處理功能。

一、@Retryable是什么?

@Retryable是Spring提供的可重試注解,該注解一般用于方法上,實現(xiàn)方法的重試機制。

二、使用步驟

POM依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>

啟動@Retryable

在啟動類上加上@EnableRetry,開啟重試機制。

@EnableRetry
@SpringBootApplication
public class SpringBootRetryApplication {

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

Service類

在需要重試方法上加上@Restryable

@Slf4j
@Service
public class LoginService {

    @Retryable(value = Exception.class, maxAttempts = 5, backoff = @Backoff(delay = 2000L, multiplier = 1))
    public void login(boolean isRetry) throws Exception {
        log.info("----------開始登錄----------");
        if (isRetry) {
            throw new Exception("重試登錄");
        }
    }
}

這里解釋一下@Retryable常用的幾個參數(shù)的含義:

  • value:拋出指定的異常才會重試
  • include:和value一樣,默認為空,當exclude也為空時,默認所有異常
  • exclude:指定不處理的異常
  • maxAttempts:最大重試次數(shù),默認是3次
  • backoff:重試等待策略,默認使用@Backoff,value為重試間隔,delay為重試之間的等待時間(毫秒為單位),multiplier指定延遲的倍數(shù)。

查看效果

可以看到,重試5次之后拋出異常,不再重試。

@Recover

當重試耗盡完后還是失敗,會出現(xiàn)什么情況?

RetryOperations可以將控制傳遞給另一個回調,即RecoveryCallback。Spring還提供了@Recover注解,用于@Retryable重試失敗后處理方法,此方法里的異常一定要是@Retryable方法里拋出的異常,否則不會回調這個方法。

    @Recover
    public void doRecover(Exception e) {
        log.info("----------重試失敗回調方法----------");
        log.info(e.getMessage());
    }

@Recover注解需要注意的點:

  1. 方法的返回值必須與@Retryable方法一致
  2. 方法的第一個參數(shù),必須是Throwable類型的,建議是與@Retryable配置的異常一致,其他的參數(shù),需要與@Retryable方法的參數(shù)一致。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • java取某段/某個時間段的值的方法

    java取某段/某個時間段的值的方法

    這篇文章主要介紹了java取某段/某個時間段的值的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • servlet簡單實現(xiàn)文件下載的方法

    servlet簡單實現(xiàn)文件下載的方法

    這篇文章主要介紹了servlet簡單實現(xiàn)文件下載的方法,涉及基于servlet技術實現(xiàn)流形式文件傳輸?shù)南嚓P操作技巧,需要的朋友可以參考下
    2016-12-12
  • Java關于IO流的全面介紹

    Java關于IO流的全面介紹

    下面小編就為大家?guī)硪黄狫ava關于IO流的全面介紹。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • 關于ReentrantLock原理全面解讀

    關于ReentrantLock原理全面解讀

    這篇文章主要介紹了關于ReentrantLock原理全面解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 解決Springboot2.1.x配置Activiti7單獨數(shù)據源問題

    解決Springboot2.1.x配置Activiti7單獨數(shù)據源問題

    這篇文章主要介紹了Springboot2.1.x配置Activiti7單獨數(shù)據源問題,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Java Process類的詳解及實例代碼

    Java Process類的詳解及實例代碼

    這篇文章主要介紹了Java Process類的詳解及實例代碼的相關資料,需要的朋友可以參考下
    2017-02-02
  • Java?SSM實現(xiàn)前后端協(xié)議聯(lián)調詳解下篇

    Java?SSM實現(xiàn)前后端協(xié)議聯(lián)調詳解下篇

    首先我們已經知道,在現(xiàn)在流行的“前后端完全分離”架構中,前后端聯(lián)調是一個不可能避免的問題,這篇文章主要介紹了Java?SSM實現(xiàn)前后端協(xié)議聯(lián)調過程
    2022-08-08
  • 詳解servlet配置load-on-startup的作用

    詳解servlet配置load-on-startup的作用

    本文對load-on-startup的相關內容作了詳細介紹,然后通過具體實例向大家展示了其作用,希望可以給大家一個參考。
    2017-09-09
  • Java面試重點中的重點之Elasticsearch核心原理

    Java面試重點中的重點之Elasticsearch核心原理

    ElasticSearch是一個基于Lucene的搜索引擎,是用Java語言開發(fā)的,能夠達到實時搜索,穩(wěn)定,可靠,快速,安裝使用方便,作為Apache許可條款下的開放源碼發(fā)布,是一種流行的企業(yè)級搜索引擎,是最受歡迎的企業(yè)搜索引擎
    2022-01-01
  • Json字符串轉Java對象和List代碼實例

    Json字符串轉Java對象和List代碼實例

    這篇文章主要介紹了Json字符串轉Java對象和List代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06

最新評論