最新国产好看的视频,伊人天堂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>

開(kāi)啟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有趣好玩的圖形界面開(kāi)發(fā)八個(gè)案例實(shí)現(xiàn)

    Java有趣好玩的圖形界面開(kāi)發(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)用開(kāi)發(fā)中,我們常常需要在不同的環(huán)境(如開(kāi)發(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)論

    SHOW| 芦山县| 怀仁县| 陆河县| 遂昌县| 鄯善县| 梧州市| 南郑县| 临江市| 东台市| 台中县| 博湖县| 陇南市| 七台河市| 宁武县| 东方市| 分宜县| 保定市| 辰溪县| 深圳市| 介休市| 临湘市| 揭东县| 青海省| 姚安县| 沛县| 辛集市| 银川市| 长汀县| 土默特右旗| 瓦房店市| 平湖市| 百色市| 绥化市| 兴安盟| 麦盖提县| 凉城县| 伊金霍洛旗| 高清| 大同市| 台南市|