我已经将@Retryable放在接口方法上,现在我需要包含多个异常来重试。
码:
@Retryable(interceptor = "someRetryInterceptor",
include = { SomeException.class, SomeOtherException.class })
这是正确的方法吗?
注意:在
someRetryInterceptor
中,我定义了RetryPolicy。 最佳答案
根据javadoc,拦截器与其他属性互斥。
因此,您必须决定使用拦截器还是包含。
但要确保:只需对其进行单元测试!
使带有@Retryable
批注的方法抛出SomeException
或SomeOtherException
并查看它。
一种测试方法:
假设您正在重试方法
void dummy() {
someObject.someOperation();
}
模拟
someObject
(使用Mockito或任何其他库),以便someOperation
将抛出S omeException/SomeOtherException
。在测试中,验证someObject.someOperation()的调用次数如果您有无限次重试(很少有用),则测试将挂起,因此该测试必须具有超时(
@Test(timeout=1000)
),并且必须在发生TimeoutException
时通过测试。如果重试次数有限,则应验证超时前
someObject.someOperation()
被调用了多少次。注意:该测试必须是Spring测试(必须加载带有
@EnableRetry
批注的上下文)。否则(如果将其编写为普通单元测试),则将完全忽略@Retryable
注释。