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 回調(diào)方法注解
代碼示例
@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ù)傳入
如果不這樣的話無法進行回調(diào),當然不配置 @Recever 也可以,那就不會有回調(diào)處理了
寫一個action 調(diào)用一下方法
@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(); } } }
輸出結(jié)果
: 開始測試 1704852025819
: 開始測試 1704852026824
: 開始測試 1704852027833
: 重試3次失敗
以上最簡單的使用方式就結(jié)束了,
如果不加任何配置默認會調(diào)用三次,每次間隔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了,只能對網(wǎng)絡失敗,或者對方接口異常進行重推,如果是參數(shù)問題,或者對方系統(tǒng)問題一直沒有修復則不起作用
retry的介紹就到這里了,還有一些其他用法,可以自行查閱api或者找一些別的帖子,如果有需要可以留言,我再繼續(xù)把其他示例補充上
到此這篇關(guān)于spring retry 配置及使用的文章就介紹到這了,更多相關(guān)spring retry使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
4位吸血鬼數(shù)字的java實現(xiàn)思路與實例講解
今天小編就為大家分享一篇關(guān)于4位吸血鬼數(shù)字的java實現(xiàn)思路與實例講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)雙向鏈表功能
這篇文章主要為大家詳細介紹了java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)雙向鏈表功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11java 各種數(shù)據(jù)類型的互相轉(zhuǎn)換實例代碼
這篇文章主要介紹了java 各種數(shù)據(jù)類型的互相轉(zhuǎn)換實例代碼,需要的朋友可以參考下2020-10-10java中進程與線程_三種實現(xiàn)方式總結(jié)(必看篇)
下面小編就為大家?guī)硪黄猨ava中進程與線程_三種實現(xiàn)方式總結(jié)(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06