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

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ǎ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 ReentrantLock的使用與應(yīng)用實(shí)戰(zhàn)

    Java ReentrantLock的使用與應(yīng)用實(shí)戰(zhàn)

    ReentrantLock是Java并發(fā)包中提供的一種可重入互斥鎖,它作為synchronized關(guān)鍵字的替代方案,提供了更靈活、更強(qiáng)大的線程同步機(jī)制,下面就來(lái)介紹一下ReentrantLock的實(shí)戰(zhàn)使用
    2025-09-09
  • springboot用thymeleaf模板的paginate分頁(yè)完整代碼

    springboot用thymeleaf模板的paginate分頁(yè)完整代碼

    本文根據(jù)一個(gè)簡(jiǎn)單的user表為例,展示 springboot集成mybatis,再到前端分頁(yè)完整代碼,需要的朋友可以參考下
    2017-07-07
  • spring boot mogodb多條件拼接的解決方法

    spring boot mogodb多條件拼接的解決方法

    這篇文章主要介紹了spring boot mogodb多條件拼接的解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • Java使用正則表達(dá)式匹配獲取鏈接地址的方法示例

    Java使用正則表達(dá)式匹配獲取鏈接地址的方法示例

    這篇文章主要介紹了Java使用正則表達(dá)式匹配獲取鏈接地址的方法,簡(jiǎn)單分析了java正則匹配常用方法及獲取網(wǎng)址鏈接的相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • struts2通過(guò)action返回json對(duì)象

    struts2通過(guò)action返回json對(duì)象

    struts2通過(guò)action返回json對(duì)象其實(shí)很簡(jiǎn)單的,首先我們需要引入jar包,然后在寫(xiě)一個(gè)簡(jiǎn)單的action就好了,接下來(lái)通過(guò)本文給大家介紹struts2通過(guò)action返回json對(duì)象的方法,感興趣的朋友一起看看吧
    2016-09-09
  • Java?中的泛型超全詳解

    Java?中的泛型超全詳解

    這篇文章主要介紹了泛型的概念、使用場(chǎng)景、泛型類、泛型方法、泛型接口、類型擦除以及泛型通配符,泛型是一種強(qiáng)大的工具,可以幫助我們編寫(xiě)更安全和更通用的代碼,感興趣的朋友一起看看吧
    2025-03-03
  • MyBatis查詢時(shí)屬性名和字段名不一致問(wèn)題的解決方法

    MyBatis查詢時(shí)屬性名和字段名不一致問(wèn)題的解決方法

    這篇文章主要給大家介紹了關(guān)于MyBatis查詢時(shí)屬性名和字段名不一致問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java設(shè)計(jì)模式之工廠方法模式實(shí)例簡(jiǎn)析

    Java設(shè)計(jì)模式之工廠方法模式實(shí)例簡(jiǎn)析

    這篇文章主要介紹了Java設(shè)計(jì)模式之工廠方法模式,較為詳細(xì)的分析了Java工廠模式的功能、定義并給出了實(shí)例代碼加以總結(jié)分析,需要的朋友可以參考下
    2015-11-11
  • 舉例講解Java中final關(guān)鍵字的用法

    舉例講解Java中final關(guān)鍵字的用法

    Java中的final關(guān)鍵字可以被用來(lái)修飾變量、方法和類等,意味著終結(jié)、不可改變,下面我們就來(lái)舉例講解Java中final關(guān)鍵字的用法:
    2016-06-06
  • RestTemplate如何使用JSON發(fā)送Post請(qǐng)求

    RestTemplate如何使用JSON發(fā)送Post請(qǐng)求

    這篇文章主要介紹了RestTemplate如何使用JSON發(fā)送Post請(qǐng)求問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論

岳普湖县| 襄樊市| 桐梓县| 睢宁县| 临邑县| 敦煌市| 阜平县| 平乐县| 望都县| 加查县| 炉霍县| 九江县| 滨州市| 晋州市| 阿拉尔市| 新干县| 岢岚县| 新竹市| 延安市| 湄潭县| 龙井市| 洛扎县| 建德市| 新兴县| 当涂县| 克拉玛依市| 博白县| 花莲县| 南澳县| 永顺县| 贺州市| 蕉岭县| 仪陇县| 敦化市| 喀喇沁旗| 宁德市| 临潭县| 朝阳区| 忻州市| 留坝县| 汉寿县|