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

使用Spring?Retry實現(xiàn)業(yè)務(wù)異常重試

 更新時間:2024年01月03日 09:29:24   作者:程序無涯海  
在系統(tǒng)中經(jīng)常遇到業(yè)務(wù)重試的邏輯,比如三方接口調(diào)用,timeout重試三遍,異常處理重試的兜底邏輯等,本文給大家介紹一下如何使用Spring?Retry優(yōu)雅的實現(xiàn)業(yè)務(wù)異常重試,需要的朋友可以參考下

在系統(tǒng)中經(jīng)常遇到業(yè)務(wù)重試的邏輯,比如三方接口調(diào)用,timeout重試三遍,異常處理重試的兜底邏輯等。那你是不是還在用下面這種方式呢:

我想大家可能很多時候也會這么寫,這是能想到的第一個方法,但是我們這段代碼,會覺得很別扭,不夠優(yōu)雅,如果有多個重試的邏輯,就會顯得重復(fù)代碼太多,也不容易理解,總之在遇到Spring Retry之前我也一直在想有沒有更好的方法去解決這種問題。下面我們來看看Spring Retry如何實現(xiàn)的。

項目配置

添加依賴

    <dependencies>
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
            <version>1.3.1</version>
        </dependency>
    </dependencies>

啟用Spring Retry支持,添加**@EnableRetry**注解

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

@Retryable 注解形式

注解方式就是在啟用重試特性的方法上使用@Retryable注釋。

public interface RetryService {
    /**
     * 指定異常CustomRetryException重試,重試最大次數(shù)為4(默認(rèn)是3),重試補償機制間隔200毫秒
     * 還可以配置exclude,指定異常不充實,默認(rèn)為空
     * @return result
     * @throws CustomRetryException 指定異常
     */
    @Retryable(value = {CustomRetryException.class},maxAttempts = 4,backoff = @Backoff(200))
    String retry() throws CustomRetryException;
}
  • value屬性告訴 Spring retry 在方法在CustomRetryException異常出現(xiàn)時觸發(fā)重試。
  • maxAttempts設(shè)置重試的最大次數(shù),如果沒有指定默認(rèn)值為3。
  • backoff指定下次重試的延遲時間,默認(rèn)值為1秒。

@Recover注解使用

當(dāng)被@Retryable注解的方法由于指定的異常而失敗時,用于定義單獨恢復(fù)方法的@Recover注釋。

@Service
@Slf4j
public class RetryServiceImpl implements RetryService {
?
    private static int count = 1;
?
    @Override
    public String retry() throws CustomRetryException {
        log.info("retry{},throw CustomRetryException in method retry",count);
        count ++;
        throw new CustomRetryException("throw custom exception");
    }
?
    @Recover
    public String recover(Throwable throwable) {
        log.info("Default Retry service test");
        return "Error Class :: " + throwable.getClass().getName();
    }
?
}

RetryTemplate實現(xiàn)形式

@Bean
    @ConditionalOnMissingBean
    public RetryTemplate retryTemplate(){
        final SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy();
        simpleRetryPolicy.setMaxAttempts(4);
?
        final FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
        fixedBackOffPolicy.setBackOffPeriod(1000L);
?
        return RetryTemplate.builder()
            .customPolicy(simpleRetryPolicy)
            .customBackoff(fixedBackOffPolicy)
            .retryOn(CustomRetryException.class)
            .build();
    }

// 執(zhí)行部分
@Autowired
RetryTemplate retryTemplate;

template.execute(ctx -> {
    return backendAdapter.getBackendResponse(...);
});

總結(jié)

那么哪些地方我們能用到Spring Retry呢?有這兩點建議

  • 僅在臨時錯誤上使用重試。不建議它在永久錯誤中使用它,因為這樣可能導(dǎo)致系統(tǒng)性能問題。
  • 它不是熔斷器的替代的一種方式,最好在允許的情況下,既使用熔斷器,又使用重試器。

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

相關(guān)文章

  • SpringBoot、Java 使用 Jsoup 解析 HTML 頁面的詳細(xì)步驟

    SpringBoot、Java 使用 Jsoup 解析 HTML 頁面

    這篇文章主要介紹了SpringBoot、Java 使用 Jsoup 解析 HTML 頁面的詳細(xì)步驟,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • spring?boot自帶的page分頁問題

    spring?boot自帶的page分頁問題

    這篇文章主要介紹了spring?boot自帶的page分頁問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 如何通過Java實現(xiàn)PDF轉(zhuǎn)高質(zhì)量圖片

    如何通過Java實現(xiàn)PDF轉(zhuǎn)高質(zhì)量圖片

    在Java中,將PDF文件轉(zhuǎn)換為高質(zhì)量的圖片可以使用不同的庫,其中最常用的庫之一是?Apache?PDFBox,下面我們就來看看這個庫的具體使用吧
    2024-10-10
  • Spring Bean生命周期之Bean元信息的配置與解析階段詳解

    Spring Bean生命周期之Bean元信息的配置與解析階段詳解

    這篇文章主要為大家詳細(xì)介紹了Spring Bean生命周期之Bean元信息的配置與解析階段,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • java隨機字符串生成示例

    java隨機字符串生成示例

    這篇文章主要介紹了java隨機字符串生成示例,這個字符隨機生成類可以生成多種組合的字符串,比如大+小字符+數(shù)字+符號,需要的朋友可以參考下
    2014-03-03
  • 詳解使用Java代碼讀取并比較本地兩個txt文件區(qū)別

    詳解使用Java代碼讀取并比較本地兩個txt文件區(qū)別

    這篇文章主要為大家介紹了使用Java代碼讀取并比較本地兩個txt文件區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • IDEA安裝插件的兩種方式詳解

    IDEA安裝插件的兩種方式詳解

    插件是開發(fā)工具的擴展程序,通常由第三方提供,當(dāng)安裝了插件后,原開發(fā)工作的菜單、按鈕等開發(fā)環(huán)境可能會發(fā)生變化,本文通過圖文給大家詳細(xì)介紹了IDEA安裝插件的兩種方式,需要的朋友可以參考下
    2025-09-09
  • java實現(xiàn)文件和base64相互轉(zhuǎn)換

    java實現(xiàn)文件和base64相互轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了java如何實現(xiàn)文件和base64相互轉(zhuǎn)換,文中的示例代碼講解詳細(xì),具有一定的參考價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • Java使用ByteArrayOutputStream 和 ByteArrayInputStream 避免重復(fù)讀取配置文件的方法

    Java使用ByteArrayOutputStream 和 ByteArrayInputStream 避免重復(fù)讀取配置文

    這篇文章主要介紹了Java使用ByteArrayOutputStream 和 ByteArrayInputStream 避免重復(fù)讀取配置文件的方法,需要的朋友可以參考下
    2015-12-12
  • 使用 Spring Boot 2.0 + WebFlux 實現(xiàn) RESTful API功能

    使用 Spring Boot 2.0 + WebFlux 實現(xiàn) RESTful API功能

    什么是 Spring WebFlux, 它是一種異步的, 非阻塞的, 支持背壓(Back pressure)機制的Web 開發(fā)框架.下面通過本文給大家介紹使用 Spring Boot 2.0 + WebFlux 實現(xiàn) RESTful API功能,需要的朋友參考下吧
    2018-01-01

最新評論

都昌县| 乌拉特后旗| 达日县| 晋江市| 司法| 孝感市| 承德市| 伊宁市| 白河县| 调兵山市| 温泉县| 阿图什市| 泰和县| 交口县| 文成县| 大新县| 莆田市| 万全县| 玛曲县| 星座| 富宁县| 宁德市| 凤城市| 巴里| 清苑县| 抚宁县| 宁陕县| 博罗县| 海盐县| 措勤县| 元谋县| 凤山县| 海门市| 宣化县| 淅川县| 苗栗市| 潼南县| 凤城市| 民县| 谢通门县| 保山市|