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

Spring-retry實(shí)現(xiàn)循環(huán)重試功能

 更新時(shí)間:2023年07月07日 14:11:35   作者:zsq_fengchen  
這篇文章主要介紹了Spring-retry 優(yōu)雅的實(shí)現(xiàn)循環(huán)重試功能,通過(guò)@Retryable注解,優(yōu)雅的實(shí)現(xiàn)循環(huán)重試功能,需要的朋友可以參考下

引言

在實(shí)際的應(yīng)用場(chǎng)景中,可能經(jīng)常會(huì)遇到,當(dāng)請(qǐng)求一個(gè)接口調(diào)一個(gè)服務(wù)的時(shí)候,出現(xiàn)異?;蚓W(wǎng)絡(luò)出現(xiàn)故障的情況下就會(huì)失敗,而對(duì)于那些重要的服務(wù)當(dāng)失敗后,可能我們就會(huì)進(jìn)行重試,多調(diào)用幾次,如果還是失敗再另外進(jìn)行單獨(dú)處理。接下來(lái),就是要講解的重點(diǎn)內(nèi)容,我們可以通過(guò)@Retryable注解,優(yōu)雅的實(shí)現(xiàn)循環(huán)重試功能。

1:引入依賴

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

2:在啟動(dòng)類上開(kāi)啟retry重試功能

package com.patent.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.retry.annotation.EnableRetry;
@SpringBootApplication
@EnableRetry
public class PatenCloudApplication {
    public static void main(String[] args) {
        SpringApplication.run(PatenCloudApplication.class, args);
    }
}

3:業(yè)務(wù)處理,在要調(diào)用的方法上加上@Retryable注解

 @Autowired
    private VehicleLocationDataService vehicleLocationDataService;
    /**
     * 需要在啟動(dòng)類中添加@EnableRetry注釋以開(kāi)啟重試功能,最后在相應(yīng)的方法上添加@Retryable注解。
     * @Recover注解,重試完成之后執(zhí)行的回調(diào)方法
     * 重試機(jī)制,如果調(diào)用方法過(guò)程中觸發(fā)了RuntimeException異常,則20秒后重試一次,最多重試3次,三次重試后會(huì)觸發(fā)recover方法
     * @param orderNo
     * @param chassisNo
     * @param carStatus
     */
    @GetMapping("/retryMyTest")
    @Retryable(value = RuntimeException.class,maxAttempts = 3, backoff = @Backoff(value = 10000L), recover = "recover", listeners = {"myRetryListener"})
    public void retry(String orderNo, String chassisNo, String carStatus) throws RuntimeException {
        vehicleLocationDataService.retryMyTest(orderNo,chassisNo,carStatus);
    }

4:retryMyTest方法的邏輯處理

package com.patent.cloud.retry;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class VehicleLocationDataService {
    public  static  Integer retryCount = 1;
    public void retryMyTest(String orderNo, String chassisNo, String carStatus){
        boolean flag = false;
        if("P8012985".equals(chassisNo)){
            flag = true;
        }
        if(retryCount==4){
            retryCount =1;
        }
        if(!flag){
           log.info("有異常哦,我再試多幾次看下還有沒(méi)異常, 重試第{}次, {},{},{}",retryCount, orderNo,chassisNo,carStatus);
           retryCount ++;
            throw new RuntimeException("調(diào)用失敗!");
        }
    }
}

當(dāng)程序出現(xiàn)RuntimeException的時(shí)候,就好觸發(fā)重試

5:recover方法,上邊定義了maxAttempts 為3,也就是說(shuō),重試三次后,如果還失敗了,則調(diào)用recover方法,需要在方法上標(biāo)注@Recover注解

@Recover
public void recover(RuntimeException runtimeException,String orderNo, String chassisNo, String carStatus) {
  log.info("=======觸發(fā)重試了recover方法======{}==={}=={}===",orderNo,chassisNo,carStatus);
}

6:監(jiān)聽(tīng),同時(shí)還是對(duì)重試方法進(jìn)行了監(jiān)聽(tīng),如我們?cè)诜椒╮etry上,加了listeners 監(jiān)聽(tīng)

package com.patent.cloud.retry;
import lombok.extern.slf4j.Slf4j;
import org.springframework.retry.RetryCallback;
import org.springframework.retry.RetryContext;
import org.springframework.retry.listener.RetryListenerSupport;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class MyRetryListener extends RetryListenerSupport {
    @Override
    public <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
        log.info("監(jiān)聽(tīng)到重試過(guò)程關(guān)閉了");
        log.info("=======================================================================");
    }
    @Override
    public <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
        log.info("監(jiān)聽(tīng)到重試過(guò)程錯(cuò)誤了");
    }
    @Override
    public <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) {
        log.info("=======================================================================");
        log.info("監(jiān)聽(tīng)到重試過(guò)程開(kāi)啟了");
        return true;
    }
}

7:運(yùn)行結(jié)果

到此這篇關(guān)于Spring-retry 優(yōu)雅的實(shí)現(xiàn)循環(huán)重試功能的文章就介紹到這了,更多相關(guān)Spring-retry循環(huán)重試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Java編寫(xiě)圖形化的菜單的教程

    使用Java編寫(xiě)圖形化的菜單的教程

    這篇文章主要介紹了使用Java編寫(xiě)圖形化的菜單的教程,需要的朋友可以參考下
    2015-10-10
  • java compare compareTo方法區(qū)別詳解

    java compare compareTo方法區(qū)別詳解

    本文主要介紹了java compare compareTo方法區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 詳解eclipse項(xiàng)目中的.classpath文件原理

    詳解eclipse項(xiàng)目中的.classpath文件原理

    這篇文章介紹了eclipse項(xiàng)目中的.classpath文件的原理,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • mybatis中大批量數(shù)據(jù)插入解析

    mybatis中大批量數(shù)據(jù)插入解析

    這篇文章主要介紹了mybatis中大批量數(shù)據(jù)插入解析,使用Mybatis框架批量插入的3種方法,分別是多次調(diào)用insert方法、foreach標(biāo)簽、batch模式,本文來(lái)詳細(xì)說(shuō)明一下,需要的朋友可以參考下
    2024-01-01
  • Java中String類常用的各種方法(示例詳解)

    Java中String類常用的各種方法(示例詳解)

    本文介紹了Java中String類的常用方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • SpringBoot進(jìn)行參數(shù)校驗(yàn)的方法詳解

    SpringBoot進(jìn)行參數(shù)校驗(yàn)的方法詳解

    在日常的接口開(kāi)發(fā)中,為了防止非法參數(shù)對(duì)業(yè)務(wù)造成影響,經(jīng)常需要對(duì)接口的參數(shù)進(jìn)行校驗(yàn)。本文通過(guò)示例詳細(xì)講解了SpringBoot如何進(jìn)行參數(shù)校驗(yàn)的,感興趣的可以學(xué)習(xí)一下
    2022-04-04
  • Java實(shí)現(xiàn)的圖片上傳工具類完整實(shí)例

    Java實(shí)現(xiàn)的圖片上傳工具類完整實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)的圖片上傳工具類,涉及java針對(duì)圖片文件的檢查、上傳、清除等相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • 23種設(shè)計(jì)模式(18)java備忘錄模式

    23種設(shè)計(jì)模式(18)java備忘錄模式

    這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java備忘錄模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • java中Map集合的常用方法總結(jié)大全

    java中Map集合的常用方法總結(jié)大全

    開(kāi)發(fā)中最常用的就是List集合和Map集合,Map集合是基于java核心類java.util中的,下面這篇文章主要給大家總結(jié)介紹了關(guān)于java中Map集合的一些常用方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Spring?Framework六種常見(jiàn)設(shè)計(jì)模式

    Spring?Framework六種常見(jiàn)設(shè)計(jì)模式

    設(shè)計(jì)模式是軟件開(kāi)發(fā)的重要組成部分,本文借助spring來(lái)講解這個(gè)框架的設(shè)計(jì)模式,通過(guò)本文我們探討了spring如何利用這些模式來(lái)提供這些豐富的功能,對(duì)本文感興趣的朋友跟隨小編一起看看吧
    2023-06-06

最新評(píng)論