在 spring retry 2.x 中,可以用 retrytemplate 的 retryon 限定临时异常,并用 maxattempts(4) 表示首次调用加最多三次重试。

添加 Spring Retry 依赖
在使用 Spring Boot 3.x 依赖管理的 Maven 项目中,加入 dependencies。这里直接调用 RetryTemplate。
<dependency><groupid>org.springframework.retry</groupid><artifactid>spring-retry</artifactid></dependency>

该方式适用于需要显式控制重试范围的调用。
模拟临时错误和永久错误
把代码放到 RetryDemo.java,运行 main。
import java.util.concurrent.atomic.AtomicInteger;
import org.springframework.retry.support.RetryTemplate;
public class RetryDemo {
static class TemporaryFailure extends RuntimeException {}
public static void main(String[] args) {
var retry = RetryTemplate.builder()
.maxAttempts(4)
.fixedBackoff(100)
.retryOn(TemporaryFailure.class)
.build();
var attempts = new AtomicInteger();
String result = retry.execute(context -> {
if (attempts.incrementAndGet() {
System.out.println("permanent attempt " + context.getRetryCount());
throw new IllegalArgumentException("请求参数错误");
});
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
}
预期先输出 ok 4。参数错误只执行一次,首次调用时 getRetryCount() 为 0。
验证重试耗尽
可在 main 内追加这个一直失败的分支。
try {
retry.execute(context -> {
System.out.println("retry count " + context.getRetryCount());
throw new TemporaryFailure();
});
} catch (TemporaryFailure e) {
System.out.println("retry exhausted");
}
计数依次为 0、1、2、3。用于远程写入前,需要确认重复调用的幂等性。










