@Retryable是Spring提供的可重试注解,为了使用spring提供的重试机制,需要做如下操作:
1、在pom文件中添加相应的依赖
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>1.2.2.RELEASE</version>
</dependency>
2、在启动类或者方法所在的类上添加注解@EnableRetry
3、在需要重试的方法上添加注解@Retryable,示例如下:
@Retryable(maxAttempts = 3, backoff = @Backoff(value = 3000, multiplier = 1.5))
public Customer getCustomer(String customerId) {
if (true) {
JSONArray data = retObj.getJSONArray("data");
if (data != null && !data.isEmpty()) {
return data.toJavaList(Customer.class).get(0);
}
} else {
log.error("异常,{}", customerId);
throw new RuntimeException("获数据失败");
}
return null;
}
@Retryable注解中的参数说明:
- maxAttempts :最大重试次数,默认为3,如果要设置的重试次数为3,可以不写;
- value:抛出指定异常才会重试
- include:和value一样,默认为空,当exclude也为空时,默认所以异常
- exclude:指定不处理的异常
- backoff:重试等待策略,默认使用@Backoff@Backoff的value默认为1000L,我们设置为2000L。
@Backoff注解中的参数说明:
- value:隔多少毫秒后重试,默认为1000L,我们设置为3000L;
- delay:和value一样,但是默认为0;
- multiplier(指定延迟倍数)默认为0,表示固定暂停1秒后进行重试,如果把multiplier设置为1.5,则第一次重试为2秒,第二次为3秒,第三次为4.5秒。
4、可以在指定方法上标记@Recover来开启重试失败后调用的方法(注意,需跟重处理方法在同一个类中)
@Recover :当重试到达指定次数时,被注解的方法将被回调,可以在该方法中进行日志处理。需要注意的是发生的异常和入参类型一致时才会回调。