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
и проверка того, что значение действительно читается из свойств правильно.