我正在使用基于注释的Spring Retry。以下是我的界面:
public interface IRetriever
{
@Retryable(interceptor="RetryInterceptor")
public abstract List<Item> retrieve(final LogData transactionLogData, final RetrieveRequestType rqObject) throws InternalException, OpaqueExternalException;
}
有三个类实现此接口以调用下游服务。我想定义RetryInterceptors,以便对于每个下游调用,我应该能够定义一个单独的重试策略。本质上,我想在运行时更改RetryInterceptor。
在Spring中有没有办法在运行时更改RetryInterceptor并使代码使用特定的RetryOperationsInterceptor?
答案 0 :(得分:1)
您无法(轻松)更改拦截器,但您可以在运行时更改RetryTemplate
(setRetryOperations()
)。
拦截器中的字段不是volatile
所以在所有线程看到新模板之前可能需要一些时间,直到CPU处理器缓存被中断为止。
如果您使用有状态重试,状态将会丢失。在这种情况下,您可以更改现有模板中的重试策略(拦截器中的重试)。