使用RetryTemplate的spring-retry是否存在Bug?重试达上限后RetryContext未标记为exhausted=true
Spring Retry RetryContext exhausted 属性未更新问题解答
这不属于Bug,而是和Spring Retry的版本执行逻辑直接相关:
- 在Spring Retry 1.2.x及更早版本中,
RetryContext的exhausted属性是在恢复方法执行完成后才被设置为true的。所以你在恢复方法里打印上下文时,该属性还没完成更新,显示false是符合当时版本的既定逻辑的。 - 在Spring Retry 2.0+版本中,官方调整了执行顺序:
RetryTemplate会在调用恢复方法之前就将exhausted设为true,此时恢复方法中就能看到预期的exhausted=true状态。
你可以通过以下方式处理:
- 检查项目依赖的Spring Retry版本,若为旧版本,可考虑升级到2.0+版本解决该问题。
- 若无法升级,可在恢复方法中通过
RetryContext.getRetryCount()与重试策略的最大尝试次数对比(比如当count == maxAttempts时),自行判断是否已耗尽重试次数。
内容的提问来源于stack exchange,提问作者Shridha Jalihal
相关产品推荐
相关产品推荐

