Чтение 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 метод, к которому вы хотите применить повторные попытки.

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