Sprig重试机制 Spring-Retry

什么时候需要用到重试?

  • 在实际中,有一些场景比如,通讯失败、获取锁失败、网络波动等原因造成程序异常,但是在重处理之后会成功。
    以下是基于Spring Boot中的配置进行编写。

开发步骤

一、在启动类上(Application)添加@EnableRetry注解

二、在需要重试方法上添加@Retryable注解

@Retryable(value = { DataNotFoundException.class }, maxAttempts = 4, backoff = @Backoff(delay = 3000L, multiplier = 1))
public void testRetry() {
	System.out.println("retry start");
	throw new DataNotFoundException();
}
  • value 指定失败重试的异常类型
  • include:和value一样,默认空,当exclude也为空时,所有异常都重试
  • exclude:指定异常不重试,默认空,当include也为空时,所有异常都重试
  • maxAttempts: 重试次数,默认是3
  • backoff:重试补偿机制,默认没有
    @Backoff
  • delay:指定延迟后重试
  • multiplier:指定延迟的倍数,比如delay=5000l,multiplier=2时,第一次重试为5秒后,第 二次为10秒,第三次为20秒

三、在重试回调方法上添加@Recover注解

  • 重试次数达到指定次数会执行此方法,此方法一般用做日志记录或者异常回滚
  • 注意:此方法需要与重试方法在同一个类中;异常类型及入参要与重试方法一样
@Recover
private void testRecover(DataNotFoundException e){
	System.out.println("the execption is :" + e);
}

以下是测试执行结果:

retry start: 1530506702134
retry start: 1530506705134
retry start: 1530506708134
retry start: 1530506711134
the execption is :com.dx.asst.comm.exception.DataNotFoundException

注意:

  • 启动类或者@Configuration类需要开启重试@EnableRetry。
  • 加@Retryable注解的方法不能有返回值。

你可能感兴趣的:(Spring,Retry,Spring重试,Springboot重试,@Retryable,其他总结)