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

SpringBoot使用spring retry重試機制的操作詳解

 更新時間:2024年12月31日 10:19:55   作者:Harry技術(shù)  
實際工作中由于網(wǎng)絡(luò)波動等原因?qū)е麓a執(zhí)行失敗需要重新執(zhí)行,保證最終能夠完成業(yè)務(wù)功能,通常來說,會用try/catch,while循環(huán)或者定時任務(wù)重處理,但是這樣的做法缺乏統(tǒng)一性,要多寫很多代碼,spring-retry組件可以通過注解優(yōu)雅的實現(xiàn)重處理功能

重試在功能設(shè)計上需要根據(jù)應(yīng)用場景進行設(shè)計,讀數(shù)據(jù)的接口比較適合重試的場景,寫數(shù)據(jù)的接口就需要注意接口的冪等性了,還有就是重試次數(shù)如果太多的話會導(dǎo)致請求量加倍,給后端造成更大的壓力,設(shè)置合理的重試機制是關(guān)鍵;

Spring Retry重試框架

Spring boot使用spring retry重試機制

1.pom引用

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

2.應(yīng)用啟動類開啟retry

@EnableRetry
public class Application {
    .......
}

3.在指定方法上標(biāo)記@Retryable來開啟重試

@Retryable(value={RuntimeException.class},maxAttempts=5,backoff = @Backoff(delay = 2000,multiplier = 1.5))
public void retryTest() throws Exception {
    System.out.println(Thread.currentThread().getName()+" do something...");
    throw new RuntimeException();
}

value: 指定發(fā)生的異常進行重試

include: 和value一樣,默認空,當(dāng)exclude也為空時,所有異常都重試

exclude: 指定異常不重試,默認空,當(dāng)include也為空時,所有異常都重試

maxAttemps: 重試次數(shù),默認3

backoff: 重試補償機制,默認沒有

4.在指定方法上標(biāo)記@Recover來開啟重試失敗后調(diào)用的方法(注意,需跟重處理方法在同一個類中)

@Recover
 public void recover(RuntimeException e) {
   // ... do something
 }

使用詳解
spring-retry通過AOP實現(xiàn)對目的方法的封裝,執(zhí)行在當(dāng)前線程下,所以重試過程中當(dāng)前線程會堵塞。如果BackOff時間設(shè)置比較長,最好起異步線程重試(也可以加@Async注解)。

@Retryable注解

被注解的方法發(fā)生異常時會重試

value:指定發(fā)生的異常進行重試

include:和value一樣,默認空,當(dāng)exclude也為空時,所有異常都重試

exclude:指定異常不重試,默認空,當(dāng)include也為空時,所有異常都重試

maxAttemps:重試次數(shù),默認3

backoff:重試補償機制,默認沒有

@Backoff注解
delay:指定延遲后重試

multiplier:指定延遲的倍數(shù),比如delay=5000l,multiplier=2時,第一次重試為5秒后,第二次為10秒,第三次為20秒

@Recover
當(dāng)重試到達指定次數(shù)時,被注解的方法將被回調(diào),可以在該方法中進行日志處理。需要注意的是發(fā)生的異常和入?yún)㈩愋鸵恢聲r才會回調(diào)

spring-retry踩坑

一、@Retryable未生效可能原因

@Retryable方法必須為 public

下面情況下@Retryable不生效,即重試方法與調(diào)用它的非重試方法在同一個類中。

// 注意 此方法不生效?。?!
@EnableRetry(proxyTargetClass = true)
class test{
	public void methodA(){
		methodB();
	}
  @Retryable
  public void methodB(){
  
  }
}

解決方案:將重試方法單獨寫了一個Service。

3.每個類中對一種異常只有一個重試方法。兩個重試方法捕捉Exception,重試失效。

二、@Recover未生效可能原因

①返回值必須和被重試的函數(shù)返回值一致;
②參數(shù)中除了第一個是觸發(fā)的異常外,后面的參數(shù)需要和被重試函數(shù)的參數(shù)列表一致;
③當(dāng)然這里的返回值部分也可以再做一次手動重試,但是已經(jīng)嘗試那么多次都失敗了,所以在兜底函數(shù)中再做一次也意義不大。因此我的考慮是,這里就用來做日志記錄就好。

以上就是SpringBoot使用spring retry重試機制的操作詳解的詳細內(nèi)容,更多關(guān)于SpringBoot使用spring retry的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于SpringBoot實現(xiàn)HTTP請求簽名驗證機制

    基于SpringBoot實現(xiàn)HTTP請求簽名驗證機制

    在分布式系統(tǒng)交互中,API接口的安全性至關(guān)重要,本文將深入解析基于Spring Boot實現(xiàn)的HTTP請求簽名驗證機制,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • Java運行時jar終端輸出的中文日志亂碼兩種解決方式

    Java運行時jar終端輸出的中文日志亂碼兩種解決方式

    jar包啟動,今天java開發(fā)過來找,說jar包啟動日志是亂碼,這篇文章主要給大家介紹了關(guān)于Java運行時jar終端輸出的中文日志亂碼的兩種解決方式,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • SpringBoot自動裝配原理詳細解析

    SpringBoot自動裝配原理詳細解析

    這篇文章主要介紹了SpringBoot自動裝配原理詳細解析,一個對象交給Spring來管理的三種方式 @Bean @Compoment @Import,
    @Bean主要在@Configuration中,通過方法進行注入相關(guān)的Bean,@Compoent與@Service歸為一類,在類上加注入對應(yīng)的類,需要的朋友可以參考下
    2024-01-01
  • 還在用if(obj!=null)做非空判斷,帶你快速上手Optional

    還在用if(obj!=null)做非空判斷,帶你快速上手Optional

    這篇文章主要介紹了還在用if(obj!=null)做非空判斷,帶你快速上手Optional,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 簡單學(xué)習(xí)Java抽象類要點及實例

    簡單學(xué)習(xí)Java抽象類要點及實例

    這篇文章主要介紹了Java抽象類要點及實例,有需要的朋友可以參考一下
    2014-01-01
  • log4j2采用AsyncLogger出現(xiàn)的錯誤及解決方案

    log4j2采用AsyncLogger出現(xiàn)的錯誤及解決方案

    這篇文章主要介紹了log4j2采用AsyncLogger出現(xiàn)的錯誤及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringMVC框架使用jackson封裝數(shù)據(jù)過程中遇到的問題及解決

    SpringMVC框架使用jackson封裝數(shù)據(jù)過程中遇到的問題及解決

    這篇文章主要介紹了SpringMVC框架使用jackson封裝數(shù)據(jù)過程中遇到的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Spring Boot利用@Async異步調(diào)用:使用Future及定義超時詳解

    Spring Boot利用@Async異步調(diào)用:使用Future及定義超時詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot利用@Async異步調(diào)用:使用Future及定義超時的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2018-05-05
  • Java實現(xiàn)圖片轉(zhuǎn)base64完整代碼示例

    Java實現(xiàn)圖片轉(zhuǎn)base64完整代碼示例

    這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)圖片轉(zhuǎn)base64的相關(guān)資料,Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個可打印字符來表示二進制數(shù)據(jù)的方法,需要的朋友可以參考下
    2023-12-12
  • Java中常見的文件拷貝方式小結(jié)

    Java中常見的文件拷貝方式小結(jié)

    這篇文章主要為大家詳細介紹了JAVA?四種拷貝文件的方式,分析一下他們對內(nèi)存使用的方式和各自應(yīng)用的場景,其實也是對之前學(xué)過的知識做一個回顧吧,快跟隨小編一起學(xué)習(xí)起來吧
    2024-03-03

最新評論

博湖县| 墨竹工卡县| 舒城县| 黄冈市| 腾冲县| 密云县| 含山县| 枣阳市| 洛宁县| 嵊州市| 泰来县| 定州市| 临江市| 唐山市| 余庆县| 临安市| 鄂托克前旗| 比如县| 安阳市| 乌鲁木齐市| 永清县| 崇文区| 和龙市| 抚顺市| 云阳县| 麻栗坡县| 綦江县| 东丽区| 济南市| 石家庄市| 南昌市| 宁陵县| 常德市| 广安市| 嘉祥县| 林甸县| 巩义市| 勃利县| 特克斯县| 巴彦县| 神木县|