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

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

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

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

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

項(xiàng)目配置

添加依賴

    <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),重試補(bǔ)償機(jī)制間隔200毫秒
     * 還可以配置exclude,指定異常不充實(shí),默認(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)時(shí)觸發(fā)重試。
  • maxAttempts設(shè)置重試的最大次數(shù),如果沒(méi)有指定默認(rèn)值為3。
  • backoff指定下次重試的延遲時(shí)間,默認(rèn)值為1秒。

@Recover注解使用

當(dāng)被@Retryable注解的方法由于指定的異常而失敗時(shí),用于定義單獨(dú)恢復(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實(shí)現(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呢?有這兩點(diǎn)建議

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

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

相關(guān)文章

  • 封裝了一個(gè)Java數(shù)據(jù)庫(kù)訪問(wèn)管理類

    封裝了一個(gè)Java數(shù)據(jù)庫(kù)訪問(wèn)管理類

    剛剛試著用JDBC,仿著原來(lái)C#的寫法寫了這段代碼,自己覺(jué)得還是挺粗糙的,還煩請(qǐng)路過(guò)的朋友推薦一個(gè)寫得較好較完整的相關(guān)例程以便學(xué)習(xí)。謝謝!
    2009-02-02
  • java反射如何獲取方法屬性和方法調(diào)用

    java反射如何獲取方法屬性和方法調(diào)用

    這篇文章主要介紹了java反射如何獲取方法屬性和方法調(diào)用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 使用maven運(yùn)行Java Main的三種方法解析

    使用maven運(yùn)行Java Main的三種方法解析

    這篇文章主要介紹了使用maven運(yùn)行Java Main的三種方式的相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • 使用Swagger2實(shí)現(xiàn)自動(dòng)生成RESTful?API文檔

    使用Swagger2實(shí)現(xiàn)自動(dòng)生成RESTful?API文檔

    在開發(fā)?RESTful?API?的過(guò)程中,文檔是非常重要的一部分,可以幫助開發(fā)者了解?API?的功能和使用方法,本文將使用Swagger2?實(shí)現(xiàn)自動(dòng)生成?RESTful?API?文檔,需要的可以參考一下
    2023-06-06
  • java數(shù)據(jù)結(jié)構(gòu)-堆實(shí)現(xiàn)優(yōu)先隊(duì)列

    java數(shù)據(jù)結(jié)構(gòu)-堆實(shí)現(xiàn)優(yōu)先隊(duì)列

    通常都把隊(duì)列比喻成排隊(duì)買東西,大家都很守秩序,先排隊(duì)的人就先買東西。但是優(yōu)先隊(duì)列有所不同,它不遵循先進(jìn)先出的規(guī)則,而是根據(jù)隊(duì)列中元素的優(yōu)先權(quán),優(yōu)先權(quán)最大的先被取出,這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)-堆實(shí)現(xiàn)優(yōu)先隊(duì)列,感興趣的朋友一起看看吧
    2021-08-08
  • 深入解析Java的Struts框架中的控制器DispatchAction

    深入解析Java的Struts框架中的控制器DispatchAction

    這篇文章主要介紹了深入解析Java的Struts框架中的控制器DispatchAction,Struts是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • spring boot微服務(wù)自定義starter原理詳解

    spring boot微服務(wù)自定義starter原理詳解

    這篇文章主要介紹了spring boot微服務(wù)自定義starter原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 淺談Springboot之于Spring的優(yōu)勢(shì)

    淺談Springboot之于Spring的優(yōu)勢(shì)

    這篇文章主要介紹了淺談Springboot之于Spring的優(yōu)勢(shì),簡(jiǎn)述了在Java EE開發(fā)中遇到的問(wèn)題,言簡(jiǎn)意賅,需要的朋友可以參考下。
    2017-09-09
  • 利用Java讀取二進(jìn)制文件實(shí)例詳解

    利用Java讀取二進(jìn)制文件實(shí)例詳解

    這篇文章主要給大家介紹了利用Java讀取二進(jìn)制文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • java.io.File的renameTo方法移動(dòng)文件失敗的解決方案

    java.io.File的renameTo方法移動(dòng)文件失敗的解決方案

    這篇文章主要介紹了java.io.File的renameTo方法移動(dòng)文件失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論