我正在使用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方法工作正常。我不知道这里发生了什么,我们在点击注释之前也看到了值
答案 0 :(得分:0)
删除#{'
和'}
(包括单引号)。
@Retryable(maxAttemptsExpression = "${max.retry.attempts}")
此处不需要#{...}
。
您还应该升级到1.2.1.RELEASE。
修改强>
其他一切必须继续;这两种形式对我来说都很好......
@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
答案 1 :(得分:0)
EL1001E
也是找不到该属性时引发的错误。尝试使用@Value
将属性绑定到实例变量,并检查是否从属性中正确读取了该值。