使用spEL算法设置系统属性

时间:2014-07-14 20:25:58

标签: spring spring-el

在属性文件中配置以下属性: readTimeout=10。我想用它来设置系统属性oracle.jdbc.ReadTimeout,但首先将它乘以1000(转换为ms。) 我尝试了以下,但不起作用:

<bean id="systemPrereqs"
        class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" value="#{@systemProperties}" />
    <property name="targetMethod" value="putAll" />
    <property name="arguments">
        <util:map>
            <entry key="oracle.jdbc.ReadTimeout"
                value="#{T(java.lang.Integer).valueOf('${readTimeout}')*1000}" />
        </util:map>
    </property>
</bean>

没有创建oracle.jdbc.ReadTimeout系统属性。

但是,如果我使用以下表达式:
#{'${readTimeout}'*1000}然后对其进行评估,并创建oracle.jdbc.ReadTimeout系统属性,但使用101010 ....(一千次重复)。

似乎Spring使用T(java.lang.Integer).valueOf进行类型转换时出现问题。可能是因为util:properties / map definitions不支持spEL表达式。

1 个答案:

答案 0 :(得分:0)

不要使用'${readTimeout}'readTimeout会正常工作:

<entry key="oracle.jdbc.ReadTimeout" value="#{new Integer(readTimeout) * 1000}" />