什么时候需要用到重试?
- 在实际中,有一些场景比如,通讯失败、获取锁失败、网络波动等原因造成程序异常,但是在重处理之后会成功。
以下是基于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