Чтение maxAttempts пружины @Retryable из файла application.properties
@Retryable(value = Exception.class, maxAttempts = 3)
public Boolean sendMessageService(Request request){
...
}
аргумент maxAttempts в @Retryable
аннотация жестко закодирована. Могу ли я прочитать это значение из application.properties
файл?
что-то вроде
@Retryable(value = Exception.class, maxAttempts = "${MAX_ATTEMPTS}")
1 ответ
Да, вы можете использовать maxAttemptsExpression:
@Retryable(значение = {Exception.class}, maxAttemptsExpression = "#{${maxAttempts}}")
Добавьте @EnableRetry над своим классом, если вы еще этого не сделали.
Нет; это невозможно установить через свойство при использовании аннотации.
Вы можете подключить RetryOperationsInterceptor
бин вручную и применить его к вашему методу с помощью Spring AOP...
РЕДАКТИРОВАТЬ
<bean id="retryAdvice" class="org.springframework.retry.interceptor.RetryOperationsInterceptor">
<property name="retryOperations">
<bean class="org.springframework.retry.support.RetryTemplate">
<property name="retryPolicy">
<bean class="org.springframework.retry.policy.SimpleRetryPolicy">
<property name="maxAttempts" value="${max.attempts}" />
</bean>
</property>
<property name="backOffPolicy">
<bean class="org.springframework.retry.backoff.ExponentialBackOffPolicy">
<property name="initialInterval" value="${delay}" />
<property name="multiplier" value="${multiplier}" />
</bean>
</property>
</bean>
</property>
</bean>
<aop:config>
<aop:pointcut id="retries"
expression="execution(* org..EchoService.test(..))" />
<aop:advisor pointcut-ref="retries" advice-ref="retryAdvice"
order="-1" />
</aop:config>
куда EchoService.test
метод, к которому вы хотите применить повторные попытки.