SpringBoot:EL1003E 属性值转换

Posted

技术标签:

【中文标题】SpringBoot:EL1003E 属性值转换【英文标题】:SpringBoot: EL1003E property values casting 【发布时间】:2018-02-24 13:06:36 【问题描述】:

我有一个包含以下值的 Spring Boot 配置文件:

@Value("#new Integer('$db.pool.size')")
private Integer dbPoolSize;

@Value("#new Integer('$db.minimum.idle')")
private Integer dbMinimumIdle;

但是当我启动应用程序时,我得到了这个错误:

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1003E: A problem occurred whilst attempting to construct an object of type 'Integer' using arguments '(java.lang.String)'
    at org.springframework.expression.spel.ast.ConstructorReference.createNewInstance(ConstructorReference.java:168) ~[spring-expression-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.expression.spel.ast.ConstructorReference.getValueInternal(ConstructorReference.java:98) ~[spring-expression-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:120) ~[spring-expression-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:242) ~[spring-expression-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:161) ~[spring-context-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    ... 42 common frames omitted

【问题讨论】:

【参考方案1】:

假设您有以下 application.properties:

db.minimum.idle=12
db.pool.size=10

那么你应该这样做:

@Value("$db.pool.size")
private Integer dbPoolSize;

@Value("$db.minimum.idle")
private Integer dbMinimumIdle;

你不必创建一个新的整数,这是由 spring 自动完成的

【讨论】:

【参考方案2】:

只需使用:

@Value("$db.minimum.idle")
private Integer dbMinimumIdle;

无需使用 spel 显式实例化新整数。

【讨论】:

以上是关于SpringBoot:EL1003E 属性值转换的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 1003E

spring类型转换器(一)

CF1003E Tree Constructing 构造+数论

elemen-table表格数据转换-formatter属性

为 Spring Boot 应用程序使用多个数据源配置时,未从属性转换器内的属性获取值

vm.$refs及$el