Spring @Retryable重試方法呼叫詳解
Spring @Retryable重試方法呼叫詳解
一、使用方法
1.引入maven包
<!-- https://mvnrepository.com/artifact/org.springframework.retry/spring-retry -->
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>1.2.4.RELEASE</version>
</dependency>
2.配置啟用重試功能
1.springboot專案可以直接在啟動類上新增註解:@EnableRetry
@SpringBootApplication
@EnableRetry
public class XXXApplication {
public static void main(String[] args) {
SpringApplication.run(XXXApplication.class, args);
}
}
2.springMVC專案可以直接新增配置檔案,通過@Configuration配置Spring容器,通過@EnableRetry啟用重試功能
@Configuration
@EnableRetry
public class RetryConfig {
}
3.新增需要進行重試的業務方法,@Retryable對該方法啟用重試
@Retryable註解中的引數說明:
- 1)value:丟擲指定異常才會重試(value不為空是,include和exclude不生效)
- 2)include:指定需要處理的異常,預設為空,當exclude也為空時,所有異常都重試
- 3)exclude:指定不處理的異常,預設為空,當include也為空時,所有異常都重試
- 4)maxAttempts:最大重試次數,預設為3,如果要設定的重試次數為3,可以不寫; backoff:重試等待策略。
- delay:等待間隔時間
- maxDelay:最大等待間隔時間(預設為30s)
- multiplier:等待間隔時間放大倍數。例如(delay=2000,multiplier=2時,則重試時間為2,4,8,16……,但<=maxDelay值)
例如下圖:捕獲異常為ResultException, 2秒執行一次,每次遞增2倍,最多每10秒執行一次,最多重試60次。
@Retryable(value = ResultException.class, maxAttempts = 60, backoff = @Backoff(delay = 2000L,maxDelay = 10000L, multiplier = 2))
public void test(String testParam) throws ResultException {
System.out.println(testParam);
throw new ResultException("丟擲指定異常,重試");
}
二、常見問題
1.設定的每60秒執行一次,實際30秒執行一次
原因:沒有設定最大等待間隔時間maxDelay(預設為30s)。
2.重試功能沒有生效
原因:可能是將重試方法作為內嵌方法呼叫了(作為內嵌方法呼叫時不生效)
如下這種方式呼叫,重試不會生效。
原因是:由於Retryalbe用到了aspect增強,所以會有aspect的坑,就是方法內部呼叫,會使aspect增強失效,那麼Retryalbe當然也會失效。
public class Test{
public void a(){
b();
}
@Retryalbe
public void b(){
}
}
本文完。
相關文章
- Spring Boot中@Retryable重試教程Spring Boot
- java retry(重試) spring retry, guava retrying 詳解JavaSpringGuava
- 淘寶API介面AG文件接入呼叫方法詳解API
- [解決] spring service 呼叫當前類方法事務不生效Spring
- Spring詳解Spring
- 陣列與方法的呼叫(重點)陣列
- open feign 呼叫超時與重試
- RocketMQ 重試機制詳解及最佳實踐MQ
- Spring Retry重試機制Spring
- Spring ApplicationListener使用方法及二次呼叫問題解決SpringAPP
- 整合測試——Spring TestContext框架支援詳細解說SpringContext框架
- Spring系列最全 69 道 面試題和詳解Spring面試題
- Spring雜談 | 從橋接方法到JVM方法呼叫Spring橋接JVM
- Spring框架詳解Spring框架
- Spring AOP 詳解Spring
- Spring Bean 詳解SpringBean
- Spring Security詳解Spring
- 實戰Spring Boot 2.0系列(三) – 使用@Async進行非同步呼叫詳解Spring Boot非同步
- 實戰Spring Boot 2.0系列(三) - 使用@Async進行非同步呼叫詳解Spring Boot非同步
- Spring AOP無法呼叫自身方法的原因Spring
- 非同步呼叫和同步呼叫 及 spring的@Async註解非同步Spring
- Spring Boot中對自然語言處理工具包hanlp的呼叫詳解Spring Boot自然語言處理HanLP
- Spring容器——BeanFactory詳解SpringBean
- Spring Aop 詳解二Spring
- Spring Aop 詳解一Spring
- Spring Boot Security 詳解Spring Boot
- spring(1)-ApplicationContextAware詳解SpringAPPContext
- Spring MVCD框架中呼叫HanLP分詞的方法SpringMVC框架HanLP分詞
- 基於 Spring 的遠端過程呼叫(RPC):RMI、Hessian/Burlap、Spring HttpInvoker 四種實現方式詳解SpringRPCHTTP
- Spring IoC 公共註解詳解Spring
- 扒一扒@Retryable註解,很優雅,有點意思!
- Python錯誤重試方法Python
- Spring Cloud OpenFeign 超時與重試SpringCloud
- 解決Spring Boot測試方法Failed to load ApplicationContext問題Spring BootAIAPPContext
- RPC(遠端過程呼叫)詳解RPC
- 詳解SSH 框架中物件呼叫流程框架物件
- 詳細講解函式呼叫原理函式
- 【詳解】Spring Security 之 SecurityContextSpringContext