亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

springboot整合spring-retry的實(shí)現(xiàn)示例

瀏覽:9日期:2023-03-05 09:20:20
目錄1、背景2、解決方案2.1 pom文件2.2 applicat啟動(dòng)類2.3 controller類2.4 service測(cè)試類(重點(diǎn))2.5 項(xiàng)目啟動(dòng)2.6 使用swagger進(jìn)行驗(yàn)證1、背景

本系統(tǒng)調(diào)用外圍系統(tǒng)接口(http+json),但是發(fā)現(xiàn)有時(shí)外圍系統(tǒng)服務(wù)不太穩(wěn)定,有時(shí)候會(huì)出現(xiàn)返回一串xml或者gateway bad的信息,導(dǎo)致調(diào)用失敗,基于這一原因,采用基于springboot,整合spring-retry的重試機(jī)制到系統(tǒng)工程中,demo已經(jīng)放到github上。

2、解決方案

簡(jiǎn)要說明:demo工程基于springboot,為了方便驗(yàn)證,采用swagger進(jìn)行測(cè)試驗(yàn)證。

2.1 pom文件

<?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.5.0</version><relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.laowang</groupId> <artifactId>springretry</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springretry</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><!--retry--><dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId></dependency><dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId></dependency><!--swagger--><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version></dependency><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.7.0</version></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>

重點(diǎn)說明:aop的gav必須有,否則會(huì)跑不起來。

<!--retry--><dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId></dependency><dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId></dependency>2.2 applicat啟動(dòng)類

package com.laowang.springretry;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.retry.annotation.EnableRetry;import springfox.documentation.swagger2.annotations.EnableSwagger2;@EnableRetry@EnableSwagger2@SpringBootApplicationpublic class SpringretryApplication { public static void main(String[] args) {SpringApplication.run(SpringretryApplication.class, args); }}

說明:兩個(gè)標(biāo)簽而已

@[email protected] controller類

/** * @description: TODO * @author Administrator * @date 2021/6/2 14:55 * @version 1.0 */package com.laowang.springretry.controller;import com.laowang.springretry.service.RetryService;import io.swagger.annotations.Api;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@Api('重試測(cè)試類')@RestControllerpublic class RetryController { @Autowired RetryService retryService; @GetMapping('/testRetry') public String testRetry(int code) throws Exception {int result = retryService.retryTest(code);return 'result:' + result; }}2.4 service測(cè)試類(重點(diǎn))

/** * @description: TODO * @author Administrator * @date 2021/6/2 12:23 * @version 1.0 */package com.laowang.springretry.service;import org.springframework.retry.annotation.Backoff;import org.springframework.retry.annotation.Recover;import org.springframework.retry.annotation.Retryable;import org.springframework.stereotype.Service;import java.time.LocalTime;@Servicepublic class RetryServiceImpl implements RetryService { @Override @Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 2000, multiplier = 1.5)) public int retryTest(int code) throws Exception {System.out.println('retryTest被調(diào)用,時(shí)間:' + LocalTime.now());if (code == 0) { throw new Exception('異常拋出!');}System.out.println('retryTest被調(diào)用,情況對(duì)頭了!');return 200; } @Recover public int recover(Exception e) {System.out.println('回調(diào)方法執(zhí)行,可以記錄日志到數(shù)據(jù)庫(kù)!!!!');//記日志到數(shù)據(jù)庫(kù) 或者調(diào)用其余的方法return 400; }}

**說明:**三個(gè)標(biāo)簽

@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)3backoff:重試補(bǔ)償機(jī)制,默認(rèn)沒有

@Backoff注解說明delay:指定延遲后重試multiplier:指定延遲的倍數(shù),比如delay=2000,multiplier=1.5時(shí),第二次重試與第一次執(zhí)行間隔:2秒;第三次重試與第二次重試間隔:3秒;第四次重試與第三次重試間隔:4.5秒。。。

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

2.5 項(xiàng)目啟動(dòng)

springboot整合spring-retry的實(shí)現(xiàn)示例

執(zhí)行運(yùn)行application,啟動(dòng)成功,默認(rèn)端口號(hào):8080

springboot整合spring-retry的實(shí)現(xiàn)示例

2.6 使用swagger進(jìn)行驗(yàn)證

(1)swagger訪問地址:

http://localhost:8080/swagger-ui.html

(2)先驗(yàn)證成功返回

springboot整合spring-retry的實(shí)現(xiàn)示例

先測(cè)試正常調(diào)用試試,code=1

springboot整合spring-retry的實(shí)現(xiàn)示例

調(diào)用返回:

springboot整合spring-retry的實(shí)現(xiàn)示例

(3)重試機(jī)制:code=0(重點(diǎn))

為了更好的說明問題,參數(shù)配置增大一些:

@Retryable(value = Exception.class, maxAttempts = 5, backoff = @Backoff(delay = 2000, multiplier = 2))

執(zhí)行效果

springboot整合spring-retry的實(shí)現(xiàn)示例

說明:

從執(zhí)行效果看,總共執(zhí)行5次,第二次跟第一次之間是2秒;第三次跟第二次之間是2*2=4秒;第四次與第三次之間是:2 乘以2乘以2=8秒,第五次與第四次之間是:2 乘以2乘以2乘以2=16秒,符合預(yù)期。

執(zhí)行完成后,進(jìn)入 @Recover標(biāo)簽內(nèi)容,可以進(jìn)行日志記錄,以便后續(xù)定位問題。

github項(xiàng)目地址:https://github.com/ruanjianlaowang/springretry

到此這篇關(guān)于springboot整合spring-retry的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)springboot整合spring-retry內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 99热国产在线观看 | 亚洲1卡2卡三卡3卡4卡网站 | 日韩精品视频网站 | 亚洲影视一区二区 | 欧美黄色大片网站 | 国产欧美视频一区二区三区 | 亚洲国产日韩精品 | 日韩精品中文字幕一区三区 | 婷婷四房综合激情五月性色 | 国产91观看 | 日韩欧美a级高清毛片 | 永久免费aavv视频播放 | 免费一级毛片女人图片 | 国产欧美日韩视频怡春院 | 日韩欧美中文字幕在线播放 | 国产美女精品视频 | 免费黄色看片网站 | 一级特黄aaa大片免费看 | 浪潮ar二三区 | 亚洲欧美视频二区 | 成年人午夜网站 | 日韩精品你懂的在线播放 | 国产99精品在线观看 | 日韩欧美一区二区三区免费观看 | 免费国产成人高清在线观看视频 | 久久久精品一级二级三级 | 欧美成人一区二区三区不卡 | 视频精品一区二区三区 | 国产护士恋夜各种姿势视频 | 影音先锋ady69色资源网站 | 亚洲精品久一区 | 免费在线观看高清影片 | 国产原创在线观看 | 毛片不卡一区二区三区 | 97精品国产91久久久久久 | 亚洲成a人片在线观看中文 亚洲成a人片在线观看中文动漫 | 一级片在线播放 | 一级片免费观看视频 | 国产一区二区精品人妖系列 | 婷婷色在线视频 | 国产综合色在线视频区 |