Spring Retry не работает и получает исключение для значения maxAttemptsExpression

Я использую spring-retry-1.2.0.RELEASE.jar и используя ниже Retryable аннотация в сервисных методах

@Retryable(value = {CustomException.class}, 
            maxAttemptsExpression = "#{'${max.retry.attempts}'}", 
            backoff = @Backoff(delayExpression = "#{'${retry.delay}'}"))

В логах видно ниже исключение из-за maxAttemptsExpression значение и та же ошибка, когда мы использовали Interger.ParseInt/Interger.ValueOf также.

org.springframework.expression.spel.SpelEvaluationException: EL1001E: (pos 0): проблема преобразования типов, невозможно преобразовать java.lang.String в java.lang.Integer

Я вижу это исключение только на нескольких методах службы @Retryable, а остальные методы @Retryable работают нормально. Я понятия не имею, что здесь происходит, и мы видим значение, прежде чем перейти к аннотации

1 ответ

Удалить #{' а также '} (включая одинарные кавычки).

@Retryable(maxAttemptsExpression = "${max.retry.attempts}")

#{...} здесь не нужно

Вы также должны обновить до 1.2.1. ВЫПУСК.

РЕДАКТИРОВАТЬ

Что-то еще должно происходить; обе формы работают нормально для меня...

@SpringBootApplication
@EnableRetry
public class So48309090Application {

    public static void main(String[] args) {
        SpringApplication.run(So48309090Application.class, args);
    }

    @Bean
    public ApplicationRunner runner(Foo foo) {
        return args -> {
            try {
                foo.foo();
            }
            catch (RuntimeException e) {

            }
            try {
                foo.bar();
            }
            catch (RuntimeException e) {

            }
        };
    }

    @Component
    public static class Foo {

        @Retryable(maxAttemptsExpression = "${max.attempts}")
        public void foo() {
            System.out.println("foo");
            throw new RuntimeException("c");
        }

        @Retryable(maxAttemptsExpression = "#{'${max.attempts}'}")
        public void bar() {
            System.out.println("bar");
            throw new RuntimeException("c");
        }

    }

}

application.properties

max.attempts=5

а также

foo
foo
foo
foo
foo
bar
bar
bar
bar
bar

EL1001E также ошибка, которая возникает, когда свойство не найдено. Попробуйте связать ваше свойство с переменной экземпляра с помощью @Value и проверка того, что значение действительно читается из свойств правильно.

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