@Retryable(spring的重试机制)

12,157 阅读1分钟

@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 :当重试到达指定次数时,被注解的方法将被回调,可以在该方法中进行日志处理。需要注意的是发生的异常和入参类型一致时才会回调。