Spring中的重试机制Retry的注意事项
一 简单使用
1. 导入依赖
<!-- https://mvnrepository.com/artifact/org.springframework.retry/spring-retry --> <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <version>1.2.5.RELEASE</version> </dependency>
目前最稳定最新的版本为1.2.5, 如果这个地方父工程为spring-boot-starter-parent,可不必导入这个依赖,
由于spring-retry是基于AOP实现的,所以还需要导入
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency>
2. 启动类配置
添加注解@EnableRetry
或:
3. 在需要重试的方法上添加@@Retryable
4. @Recover
当重试到达指定次数时,被注解的方法将被回调,可以在该方法中进行日志处理。需要注意的是发生的异常和入参类型一致时才会回调。
需要注意的地方:
1. 需要重试的方法与@Recover的返回类型必须保持一致,否则无法重试,比如需要重试的方法返回参数为Map类型,回调的方法为void,重试机制将失效,
2. 注解@Recover方法必须与被重试的方法在一个类中,言外之意,一个service中如果有多个重试方法,但是@Recover方法只有一个有效
3. 避免在重试方法中进行数据库add操作,可以在@Backoff中排除异常,如果遇到异常,将会重复插入好几遍