依赖:
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>1.3.0</version>
</dependency>
1,代码例子
@EnableRetry
@SpringBootApplication
public class RetryApplication {
public static void main(String[] args) {
SpringApplication.run(RetryApplication.class, args);
}
}
/**
* 执行该方法(异常时自动重试)
* @param num
* @return
* @throws Exception
*/
@Retryable(value = Exception.class,maxAttempts = 3,backoff = @Backoff(delay = 2000,multiplier = 1.5))
public int minGoodsnum(int num) throws Exception{
logger.info("minGoodsnum开始"+ LocalTime.now());
logger.info("num={}",num);
if(num <= 0){
throw new Exception("数量不对");
}
logger.info("minGoodsnum执行结束");
return totalNum - num;
}
/**
* 重试后依旧异常时,执行该方法
* @param e
*/
@Recover
public void recover(Exception e) {
logger.error("执行方法失败。");
}
2、@EnableRetry
在入口类或者配置类上添加该注解,表示开启重试机制。
3、@Retryable
表示这个方法需要重试,它有很丰富的参数,可以满足你对重试的需求。内置参数如下
value:抛出指定异常才会重试
include:和value一样,默认为空,当exclude也为空时,默认所有异常
exclude:指定不处理的异常
maxAttempts:最大重试次数,默认3次
backoff:重试等待策略,默认使用@Backoff,@Backoff的value默认为1000L;multiplier(指定延迟倍数)默认为0,表示固定暂停1秒后进行重试,如果把multiplier设置为1.5,则第一次重试为2秒,第二次为3秒,第三次为4.5秒。
4、@Recover
兜底方法,即多次重试后还是失败就会执行这个方法。此方法里的异常一定要是@Retryable方法里抛出的异常,否则不会调用这个方法。