Springboot @Retryable 包含多个异常

Springboot @Retryable include multiple exceptions

我已经将 @Retryable 放在接口方法上,现在我需要包含多个异常来重试。

代码:

 @Retryable(interceptor = "someRetryInterceptor",
        include = { SomeException.class, SomeOtherException.class })

这样做正确吗?

注意:在someRetryInterceptor中我已经定义了RetryPolicy。

根据 javadoc 拦截器与其他属性互斥。 所以你必须决定使用拦截器还是包含。

但可以肯定的是:就unit-test吧! 使用 @Retryable 注释使您的方法抛出 SomeExceptionSomeOtherException 并查看它。

测试方法之一: 假设您正在重试 method

void dummy() {
 someObject.someOperation();
}

Mock someObject(使用 Mockito 或任何其他库)以便 someOperation 将抛出 SomeException/SomeOtherException。在测试中验证 someObject.someOperation()

的调用次数

如果你有无限重试(这很少有用)那么测试将挂起,所以这样的测试必须有超时(@Test(timeout=1000))并且你必须在 TimeoutException 发生时使测试通过。

如果您的重试次数有限,那么您应该验证 someObject.someOperation() 在超时前被调用了多少次。

注意:该测试必须是 Spring 测试(必须使用 @EnableRetry 注释加载上下文)。否则(如果你把它写成普通的单元测试)然后 @Retryable 注释将被完全忽略。

没有;当您指定 interceptor 时,所有配置都必须在那里完成(包括由 RetryPolicy 处理的异常)。

查看 javadoc:

/**
 * Retry interceptor bean name to be applied for retryable method. Is mutually
 * exclusive with other attributes.
 * @return the retry interceptor bean name
 */
String interceptor() default "";