Динамическое изменение перехватчика во время выполнения с помощью 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
так что может пройти некоторое время, прежде чем все потоки увидят новый шаблон, пока кеш процессора ЦП не будет очищен.
Если вы используете повторение с сохранением состояния, состояние будет потеряно. В этом случае вы можете изменить политику повторных попыток в существующем шаблоне (он находится в перехватчике).