Динамическое изменение перехватчика во время выполнения с помощью Spring Retry на основе аннотаций

Я использую аннотации на основе Spring Retry. Ниже мой интерфейс:

public interface IRetriever
{
      @Retryable(interceptor="RetryInterceptor") 
      public abstract List<Item> retrieve(final LogData transactionLogData, final RetrieveRequestType rqObject) throws InternalException, OpaqueExternalException;
}

Есть три класса, которые реализуют этот интерфейс для вызова нисходящих сервисов. Я хочу определить RetryInterceptors так, чтобы для каждого последующего вызова я мог определять отдельную Политику повторов. По сути, я хочу изменить RetryInterceptor во время выполнения.

Есть ли способ весной, где я могу изменить RetryInterceptor во время выполнения и заставить код использовать определенный RetryOperationsInterceptor?

1 ответ

Вы не можете (легко) изменить перехватчик, но вы можете изменить RetryTemplate во время выполнения (setRetryOperations()).

Поле в перехватчике не volatile так что может пройти некоторое время, прежде чем все потоки увидят новый шаблон, пока кеш процессора ЦП не будет очищен.

Если вы используете повторение с сохранением состояния, состояние будет потеряно. В этом случае вы можете изменить политику повторных попыток в существующем шаблоне (он находится в перехватчике).

Другие вопросы по тегам