Springboot @Retryable 包含多个异常
Springboot @Retryable include multiple exceptions
我已经将 @Retryable 放在接口方法上,现在我需要包含多个异常来重试。
代码:
@Retryable(interceptor = "someRetryInterceptor",
include = { SomeException.class, SomeOtherException.class })
这样做正确吗?
注意:在someRetryInterceptor
中我已经定义了RetryPolicy。
根据 javadoc 拦截器与其他属性互斥。
所以你必须决定使用拦截器还是包含。
但可以肯定的是:就unit-test吧!
使用 @Retryable
注释使您的方法抛出 SomeException
或 SomeOtherException
并查看它。
测试方法之一:
假设您正在重试 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 "";
我已经将 @Retryable 放在接口方法上,现在我需要包含多个异常来重试。
代码:
@Retryable(interceptor = "someRetryInterceptor",
include = { SomeException.class, SomeOtherException.class })
这样做正确吗?
注意:在someRetryInterceptor
中我已经定义了RetryPolicy。
根据 javadoc 拦截器与其他属性互斥。 所以你必须决定使用拦截器还是包含。
但可以肯定的是:就unit-test吧!
使用 @Retryable
注释使您的方法抛出 SomeException
或 SomeOtherException
并查看它。
测试方法之一: 假设您正在重试 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 "";