【发布时间】:2021-11-04 22:45:01
【问题描述】:
所以,我有一个 Spring Boot 应用程序,在我的服务类中,我正在重试多种方法,在它们上使用 @Retryable。我还使用@Recover 注释为它们创建了各自的恢复方法。
现在,很多这些服务方法在方法签名中具有相同的属性;因此,它们的恢复方法最终也具有相同的签名。
这导致的问题是重试耗尽时的恢复方法选择与预期不符。我看到在方法 1 下声明的恢复方法在所有重试后方法 3 失败时被调用。
有没有办法控制恢复方法的选择?我已经看到了 RetryTemplate 的使用,其中明确提供了 RetryCallback 和 RecoveryCallback,这是唯一的方法吗?
谢谢!
代码如下:
@Retryable
public boolean method1(String arg1) {
// do something
}
@Recover
public boolean method1Recovery(Exception e, String arg1) {
//do something
}
.
.
.
@Retryable
public boolean method3(String arg1) {
// do something
}
@Recover
public boolean method3Recovery(Exception e, String arg1) {
//do something
}
【问题讨论】:
-
另一种可能可行的方法是定义和使用不同的异常类型,例如
Method1Exception…Method3Exception. -
这听起来很公平,但它会创建多个异常类来解决这个问题。我希望我不必那样做。但是感谢您的建议,这似乎是最简单的解决方法。
-
@slauth 如果您愿意发表您的评论作为答案,我会接受。请这样做。谢谢!
-
同事建议的另一种方法是从方法中抛出不同的异常(即基本异常的子类),并使用相同的恢复来检查
instanceOf并确定如何处理每个异常。但同样,这取决于@slauth 建议的每个方法都有单独的例外。
标签: java spring spring-boot spring-retry recover