spring retry 配置及使用教程
spring retry 配置及使用
接口或功能因外界異常導致失敗后進行重推機制
依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId >
<artifactId>aspectjweaver</artifactId >
<version>1.6.11</version >
</dependency>開始使用
@EnableRetry 啟用注解
代碼示例
@SpringBootApplication
@EnableRetry
public class SpringTestApp {
public static void main(String[] args) {
SpringApplication.run(SpringTestApp.class,args);
}
}業(yè)務注解
@Retryable 業(yè)務方法注解 @Recover 回調方法注解
代碼示例
@Slf4j
@Service
public class IndexService {
@Retryable(value = NullPointerException.class)
public String request(){
log.info("開始測試 {}",System.currentTimeMillis());
String str = null;
str.indexOf("a");
return "null";
}
@Recover()
public String callback(NullPointerException e){
log.info("重試3次失敗");
throw e;
}
}注意
兩個方法的返回值要一樣,否則是不起作用的
NullPointerException 必須要將異常類型當作參數(shù)傳入
如果不這樣的話無法進行回調,當然不配置 @Recever 也可以,那就不會有回調處理了
寫一個action 調用一下方法
@RestController
public class IndexAction {
@Resource
private IndexService indexService;
@GetMapping("test1")
public String test1(){
try {
indexService.request();
return "ok";
}catch (Exception e){
return e.getClass().getName() + e.getMessage();
}
}
}輸出結果
: 開始測試 1704852025819
: 開始測試 1704852026824
: 開始測試 1704852027833
: 重試3次失敗
以上最簡單的使用方式就結束了,
如果不加任何配置默認會調用三次,每次間隔1s
注解源碼
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Retryable {
String interceptor() default "";
Class<? extends Throwable>[] value() default {};指定異常類型
Class<? extends Throwable>[] include() default {};多個異常類型
Class<? extends Throwable>[] exclude() default {};多個異常類型
String label() default "";
boolean stateful() default false;
int maxAttempts() default 3;最大重試次數(shù)
String maxAttemptsExpression() default "";最大嘗試次數(shù) 賦值后會覆蓋 maxAttempts 可以使用SpEL表達式
Backoff backoff() default @Backoff; 延遲時間
String exceptionExpression() default "";
String[] listeners() default {};
}通過以上的方式就能簡單的使用 retry了,只能對網絡失敗,或者對方接口異常進行重推,如果是參數(shù)問題,或者對方系統(tǒng)問題一直沒有修復則不起作用
retry的介紹就到這里了,還有一些其他用法,可以自行查閱api或者找一些別的帖子,如果有需要可以留言,我再繼續(xù)把其他示例補充上
到此這篇關于spring retry 配置及使用的文章就介紹到這了,更多相關spring retry使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
4位吸血鬼數(shù)字的java實現(xiàn)思路與實例講解
今天小編就為大家分享一篇關于4位吸血鬼數(shù)字的java實現(xiàn)思路與實例講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
java數(shù)據(jù)結構實現(xiàn)雙向鏈表功能
這篇文章主要為大家詳細介紹了java數(shù)據(jù)結構實現(xiàn)雙向鏈表功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11
java中進程與線程_三種實現(xiàn)方式總結(必看篇)
下面小編就為大家?guī)硪黄猨ava中進程與線程_三種實現(xiàn)方式總結(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06

