spring?retry方法調(diào)用失敗重試機(jī)制示例解析
前言
很多場景會用到重試的機(jī)制,比如:rpc服務(wù)調(diào)用失敗重試,文件上傳oss失敗重試,http接口調(diào)用失敗重試,支付回調(diào)失敗重試等等,一切因?yàn)榫W(wǎng)絡(luò),非邏輯性錯誤等不確定因素引起的失敗都可以加上重試的機(jī)制,來增強(qiáng)系統(tǒng)的健壯性,博主也處理過文件上傳到第三方oss服務(wù)失敗增加重試的事例,在這之前不知道spring有個spring-retry項(xiàng)目,所以采用的是限制次數(shù)的遞歸調(diào)用的方式來解決的。
現(xiàn)在我們來看看spring boot項(xiàng)目中怎么使用spring-retry來處理是失敗重試的問題。
1.導(dǎo)入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency>
ps:不要遺漏spring-boot-starter-aop包
2.注解的使用
/**
* @Retryable注解參數(shù)說明
* maxAttempts 重試的次數(shù)
* value 指定異常重試
* exclude 排除某個異常不重試
*
* @Backoff注解參數(shù)說明
* backoff 重試的間隔時(shí)間
*/
@Retryable(maxAttempts=9,exclude = ArrayIndexOutOfBoundsException.class,value=Exception.class,backoff=@Backoff(delay = 1000))
public String getResult(String name){
System.out.println("嘗試調(diào)用第"+i+++"次");
name= name.split(",")[1111];//異常測試
if(i!=8){
name= name.split(",")[1111];//異常測試
}
return name+":你好!";
}3.開啟重試
@SpringBootApplication
@EnableRetry
public class BootRetryApplication {
public static void main(String[] args) {
SpringApplication.run(BootRetryApplication.class, args);
}
}ps:別忘了@EnableRetry注解開啟重試
github項(xiàng)目地址:https://github.com/spring-projects/spring-retry
補(bǔ)充,手動聲明式重試:
public static void main(String[] args) {
ProxyFactory factory = new ProxyFactory(HelloService.class.getClassLoader());
factory.setInterfaces(HelloService.class);
factory.setTarget(new HelloService() {
@Override
public String say() {
System.err.println("hello");
if(1==1) throw new SecurityException();
return "a";
}
});
HelloService service = (HelloService) factory.getProxy();
JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut();
pointcut.setPatterns(".*say.*");
RetryOperationsInterceptor interceptor = new RetryOperationsInterceptor();
((Advised) service).addAdvisor(new DefaultPointcutAdvisor(pointcut, interceptor));
service.say();
}以上就是spring retry方法調(diào)用失敗重試機(jī)制示例解析的詳細(xì)內(nèi)容,更多關(guān)于spring retry方法調(diào)用失敗重試機(jī)制的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于spring 方法級緩存的多種實(shí)現(xiàn)
下面小編就為大家?guī)硪黄趕pring 方法級緩存的多種實(shí)現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
Spring Boot 整合mybatis 與 swagger2
之前使用springMVC+spring+mybatis,總是被一些繁瑣的xml配置,還經(jīng)常出錯,下面把以前的一些ssm項(xiàng)目改成了spring boot + mybatis,相對于來說優(yōu)點(diǎn)太明顯了,具體內(nèi)容詳情大家通過本文學(xué)習(xí)吧2017-08-08
Java?SpringBoot?@Async實(shí)現(xiàn)異步任務(wù)的流程分析
這篇文章主要介紹了Java?SpringBoot?@Async實(shí)現(xiàn)異步任務(wù),主要包括@Async?異步任務(wù)-無返回值,@Async?異步任務(wù)-有返回值,@Async?+?自定義線程池的操作代碼,需要的朋友可以參考下2022-12-12
Java?Float?保留小數(shù)位精度的實(shí)現(xiàn)
這篇文章主要介紹了Java?Float?保留小數(shù)位精度的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12

