1

我正在使用基于注释的 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?

4

1 回答 1

1

您不能(轻松)更改拦截器,但可以更改RetryTemplate运行时(setRetryOperations())。

拦截器中的字段并非volatile如此,因此在所有线程看到新模板之前可能需要一些时间,直到 CPU 处理器缓存被清除。

如果您使用有状态重试,则状态将丢失。在这种情况下,您可以更改现有模板(位于拦截器中)中的重试策略。

于 2016-09-15T12:33:21.130 回答