第一步、引入maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.6</version>
</dependency>
第二步、在service添加@Retryable注解
@Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 1000L, multiplier = 2))
标注此注解的方法在发生异常时会进行重试
序号 | 属性 | 类型 | 默认值 | 说明 |
---|---|---|---|---|
1 | interceptor | String | ”” | 将 interceptor 的 bean 名称应用到 retryable() |
2 | value | class[] | {} | 可重试的异常类型 |
3 | include | class[] | {} | 和value一样,默认空,当exclude也为空时,所有异常都重试 |
4 | exclude | class[] | {} | 指定异常不重试,默认空,当include也为空时,所有异常都重试 |
5 | label | String | ”” | 统计报告的唯一标签。如果没有提供,调用者可以选择忽略它,或者提供默认值。 |
6 | maxAttempts | int | 3 | 尝试的最大次数(包括第一次失败),默认为3次。 |
7 | backoff | @Backoff | @Backoff() | 重试补偿机制,指定用于重试此操作的backoff属性。默认为空 |
@Backoff
不设置参数时,默认使用FixedBackOffPolicy(指定等待时间),重试等待1000ms
序号 | 属性 | 类型 | 默认值 | 说明 |
---|---|---|---|---|
1 | delay | long | 0 | 指定延迟后重试 ,如果不设置则默认使用 1000 milliseconds |
2 | maxDelay | long | 0 | 最大重试等待时间 |
3 | multiplier | long | 0 | 指定延迟的倍数,比如delay=5000l,multiplier=2时,第一次重试为5秒后,第二次为10秒,第三次为20秒(大于0生效) |
4 | random | boolean | false | 随机重试等待时间 |
3、在启动类增加@EnableRetry注解
@EnableRetry
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}