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

SpringBoot使用spring retry重試機(jī)制的操作詳解

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

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

Spring Retry重試框架

Spring boot使用spring retry重試機(jī)制

1.pom引用

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

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

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

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

@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ā)生的異常進(jìn)行重試

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

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

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

backoff: 重試補(bǔ)償機(jī)制,默認(rèn)沒(méi)有

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

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

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

@Retryable注解

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

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

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

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

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

backoff:重試補(bǔ)償機(jī)制,默認(rèn)沒(méi)有

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

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

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

spring-retry踩坑

一、@Retryable未生效可能原因

@Retryable方法必須為 public

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

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

解決方案:將重試方法單獨(dú)寫了一個(gè)Service。

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

二、@Recover未生效可能原因

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

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

相關(guān)文章

  • intellij idea中安裝、配置mybatis插件Free Mybatis plugin的教程詳解

    intellij idea中安裝、配置mybatis插件Free Mybatis plugin的教程詳解

    這篇文章主要介紹了intellij idea中安裝、配置mybatis插件Free Mybatis plugin的教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 在Intellij IDEA中使用Debug(圖文教程)

    在Intellij IDEA中使用Debug(圖文教程)

    下面小編就為大家?guī)?lái)一篇在Intellij IDEA中使用Debug(圖文教程)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 淺談MyBatis循環(huán)Map(高級(jí)用法)

    淺談MyBatis循環(huán)Map(高級(jí)用法)

    這篇文章主要介紹了淺談MyBatis循環(huán)Map(高級(jí)用法),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • MyBatis的CRUD中的不同參數(shù)綁定查詢實(shí)現(xiàn)

    MyBatis的CRUD中的不同參數(shù)綁定查詢實(shí)現(xiàn)

    本文主要介紹了MyBatis的CRUD中的不同參數(shù)綁定查詢實(shí)現(xiàn),主要包括單個(gè)參數(shù)傳遞綁定,序號(hào)參數(shù)傳遞綁定,注解參數(shù)傳遞綁定,pojo(對(duì)象)參數(shù)傳遞綁定,map參數(shù)傳遞綁定這幾種類型,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Java Validation Api如何實(shí)現(xiàn)自定義注解

    Java Validation Api如何實(shí)現(xiàn)自定義注解

    這篇文章主要介紹了Java Validation Api如何實(shí)現(xiàn)自定義注解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 雙Token無(wú)感刷新機(jī)制實(shí)現(xiàn)方式

    雙Token無(wú)感刷新機(jī)制實(shí)現(xiàn)方式

    本文介紹了如何在Vue.js前端和Java后端實(shí)現(xiàn)雙Token的無(wú)感刷新機(jī)制,后端通過(guò)Jwt過(guò)濾器解析Token,前端在請(qǐng)求時(shí)攜帶Token并保存,當(dāng)Token過(guò)期時(shí),前端會(huì)自動(dòng)刷新并重新發(fā)送請(qǐng)求,實(shí)現(xiàn)無(wú)感刷新
    2025-03-03
  • 堆排序?qū)嵗?Java數(shù)組實(shí)現(xiàn))

    堆排序?qū)嵗?Java數(shù)組實(shí)現(xiàn))

    下面小編就為大家分享一篇使用Java數(shù)組實(shí)現(xiàn)堆排序的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Java 3種方法實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換

    Java 3種方法實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換

    這篇文章主要介紹了Java 3種方法實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換,幫助大家利用Java處理數(shù)據(jù),感興趣的朋友可以了解下
    2020-09-09
  • 在?Spring?Boot?中使用?Quartz?調(diào)度作業(yè)的示例詳解

    在?Spring?Boot?中使用?Quartz?調(diào)度作業(yè)的示例詳解

    這篇文章主要介紹了在?Spring?Boot?中使用?Quartz?調(diào)度作業(yè)的示例詳解,在本文中,我們將看看如何使用Quartz框架來(lái)調(diào)度任務(wù),Quartz支持在特定時(shí)間運(yùn)行作業(yè)、重復(fù)作業(yè)執(zhí)行、將作業(yè)存儲(chǔ)在數(shù)據(jù)庫(kù)中以及Spring集成,需要的朋友可以參考下
    2022-07-07
  • JavaWeb中獲取表單數(shù)據(jù)及亂碼問(wèn)題的解決方法

    JavaWeb中獲取表單數(shù)據(jù)及亂碼問(wèn)題的解決方法

    這篇文章主要介紹了JavaWeb中獲取表單數(shù)據(jù)及亂碼問(wèn)題的解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11

最新評(píng)論