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

SpringBoot整合Retry實(shí)現(xiàn)錯(cuò)誤重試過(guò)程逐步介紹

 更新時(shí)間:2023年02月27日 11:24:29   作者:彭世瑜  
重試的使用場(chǎng)景比較多,比如調(diào)用遠(yuǎn)程服務(wù)時(shí),由于網(wǎng)絡(luò)或者服務(wù)端響應(yīng)慢導(dǎo)致調(diào)用超時(shí),此時(shí)可以多重試幾次。用定時(shí)任務(wù)也可以實(shí)現(xiàn)重試的效果,但比較麻煩,用Spring Retry的話一個(gè)注解搞定所有,感興趣的可以了解一下

引入依賴

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

完整依賴pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.7</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- spring-retry -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

開啟spring-retry

啟動(dòng)類上增加注解 @EnableRetry

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

使用重試注解

@Retryable注解

  • value,可重試的異常類型。含義同include。默認(rèn)為空(如果excludes也為空,則重試所有異常)
  • include:可重試的異常類型。默認(rèn)為空(如果excludes也為空,則重試所有異常)
  • exclude:無(wú)需重試的異常類型。默認(rèn)為空(如果includes也為空,則重試所有異常)
  • maxAttempts:最大重試次數(shù)(包括第一次失敗),默認(rèn)為3次
  • backoff:重試等待策略,下面會(huì)在@Backoff中介紹
  • recover:表示重試次數(shù)到達(dá)最大重試次數(shù)后的回調(diào)方法

@Backoff注解

  • delay,重試之間的等待時(shí)間(以毫秒為單位)
  • maxDelay,重試之間的最大等待時(shí)間(以毫秒為單位)
  • multiplier,指定延遲的倍數(shù)
  • delayExpression,重試之間的等待時(shí)間表達(dá)式
  • maxDelayExpression,重試之間的最大等待時(shí)間表達(dá)式
  • multiplierExpression,指定延遲的倍數(shù)表達(dá)式
  • random,隨機(jī)指定延遲時(shí)間

使用示例

package com.example.demo.component;
import org.springframework.retry.annotation.Recover;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Component;
@Component
public class HttpRequest {
    private int count = 0;
    /**
     * 模擬網(wǎng)絡(luò)請(qǐng)求異常
     * @return
     */
    @Retryable(recover = "errorHandler")
    public String getResponse() {
        count++;
        System.out.println("time: " + count);
        if (count < 4) {
            throw new RuntimeException("count: " + count);
        }
        return "success";
    }
    /**
     * 錯(cuò)誤處理函數(shù)
     * 注意:需要返回 String,否則會(huì)拋出方法找不到異常
     * org.springframework.retry.ExhaustedRetryException: Cannot locate recovery method
     *
     * @param e
     * @return
     */
    @Recover
    public String errorHandler(RuntimeException e) {
        System.out.println("errorHandler");
        return "ok";
    }
}

測(cè)試

package com.example.demo.component;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class HttpRequestTest {
    @Autowired
    private HttpRequest httpRequest;
    @Test
    public void getResponse(){
        httpRequest.getResponse();
    }
}

輸出結(jié)果

time: 1
time: 2
time: 3
errorHandler

參考

SpringBoot 中使用 spring-retry 輕松解決重試

到此這篇關(guān)于SpringBoot整合Retry實(shí)現(xiàn)錯(cuò)誤重試過(guò)程逐步介紹的文章就介紹到這了,更多相關(guān)SpringBoot Retry錯(cuò)誤重試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中Controller引起的Ambiguous?mapping問(wèn)題及解決

    Java中Controller引起的Ambiguous?mapping問(wèn)題及解決

    這篇文章主要介紹了Java中Controller引起的Ambiguous?mapping問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java有趣好玩的圖形界面開發(fā)八個(gè)案例實(shí)現(xiàn)

    Java有趣好玩的圖形界面開發(fā)八個(gè)案例實(shí)現(xiàn)

    今天使用GUI技術(shù)寫了幾個(gè)練習(xí)的Demo,希望對(duì)大家學(xué)習(xí)圖形用戶界面有所幫助,感興趣的同學(xué)來(lái)看看吧,動(dòng)手敲一遍理解更通透
    2022-05-05
  • Java反射和動(dòng)態(tài)代理的使用解讀

    Java反射和動(dòng)態(tài)代理的使用解讀

    這篇文章主要介紹了Java反射和動(dòng)態(tài)代理的概念、使用方法和應(yīng)用場(chǎng)景,反射允許在運(yùn)行時(shí)動(dòng)態(tài)地獲取類的信息和調(diào)用類的方法,而動(dòng)態(tài)代理則可以在不修改原有代碼的情況下,為方法調(diào)用添加額外的功能
    2025-02-02
  • SpringBoot配置文件切換的全面指南

    SpringBoot配置文件切換的全面指南

    在SpringBoot應(yīng)用開發(fā)中,我們常常需要在不同的環(huán)境(如開發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境)中使用不同的配置,SpringBoot提供了強(qiáng)大且靈活的配置文件切換機(jī)制,使得我們能夠輕松應(yīng)對(duì)這種需求,本文將詳細(xì)介紹SpringBoot配置文件切換的相關(guān)知識(shí)與實(shí)踐,需要的朋友可以參考下
    2025-03-03
  • 最新評(píng)論

    六枝特区| 北海市| 略阳县| 内乡县| 阜城县| 七台河市| 滨州市| 泾阳县| 咸阳市| 宜川县| 平武县| 青阳县| 满洲里市| 壶关县| 贵定县| 宜州市| 富源县| 齐河县| 赣榆县| 黔东| 株洲市| 平阳县| 景泰县| 乃东县| 汪清县| 耒阳市| 麟游县| 阿巴嘎旗| 翁源县| 同心县| 繁峙县| 莆田市| 资源县| 土默特右旗| 兰考县| 汕尾市| 新津县| 宝兴县| 垫江县| 资中县| 正阳县|