如何让SpEL添加两个数字

时间:2015-01-06 12:06:28

标签: java spring spring-el

我想在application.properties中计算我的端口号,如下所示:

server.port=#{ 1 + ${myapp.web.server.port.ssl} }
myapp.web.server.port.ssl=8300

但是当我启动Spring Boot应用程序时,我得到的只是一个execption。

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type java.lang.String to type java.lang.Integer]

reference guide的数学运算符部分表明它应该有效,但事实并非如此。

在Spring内部,它可以调用:

GenericConversionService.convert("#{ 1 + 8300 }", java.lang.String, java.lang.Integer)

但是没有逻辑可以识别它的SpEL。它就像它根本没有认识到它的SpEL一样。但是,如果我将表达式更改为#{ n1 + ${myapp.web.server.port.ssl} },那么我会得到以下异常,表明它被评估为SpEL:

SpelEvaluationException: EL1008E:(pos 0): Property or field 'n1' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext' - maybe not public?

如何让SpEL为另一个属性的值添加一个?

更新

我找到了similar question,所以我尝试了类似的方法:

server.port =#{T(java.lang.Integer).parseInt('$ {fire.web.server.port.ssl}')+ 1}

但那仍然行不通。由于某种原因,它不会将其视为SpEL表达式。但如果存在语法错误,是否会将其视为SpEL表达式!

2 个答案:

答案 0 :(得分:1)

您只能从配置中执行此操作,但不能从属性执行此操作:

<bean class="...">
   <property name="port" value="#{1 + ${myapp.web.server.port.ssl}}"/>
</bean>

答案 1 :(得分:1)

我认为问题是${myapp.web.server.port.ssl}被评估为String,尝试这样的事情

#{1 + new Integer(props['myapp.web.server.port.ssl'])}

其中props是包含您的属性的bean。