Spring配置:String属性中的long值

时间:2013-09-18 11:46:26

标签: spring

我正在以这种方式在spring中配置调度程序任务:

<bean id="someSchedulerTask" class="org.springframework.scheduling.concurrent.ScheduledExecutorTask">
        <!-- start after 60 seconds -->
        <property name="delay" value="6000"/>
        <!-- depends on the enviroment -->
        <property name="period" value="${period}"/>
        <property name="runnable" ref="myScheduler"/>
    </bean>

属性period在某个配置文件中设置,似乎默认类型为String:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'someSchedulerTask' defined in class path resource [context.xml]: Initialization of b
ean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'long' for property 'period'; nested exception is ja
va.lang.NumberFormatException: For input string: "period"

我怎样才能将此步骤从Stirng更改为Long?

提前致谢

修改 占位符配置没有问题,我在另一个bean中使用此配置文件中的更多值。 声明:

period=30000

3 个答案:

答案 0 :(得分:3)

有两种方法可以做到这一点:

1:将您的方法更改为接受java.lang.Long

2:在spring中自己创建一个java.lang.Long:

<bean id="period" class="java.lang.Long">
    <constructor-arg index="0" value="${period}"/>
</bean>

<bean id="someSchedulerTask" class="org.springframework.scheduling.concurrent.ScheduledExecutorTask">
        <!-- start after 60 seconds -->
        <property name="delay" value="6000"/>
        <!-- depends on the enviroment -->
        <property name="period" ref="period"/>
        <property name="runnable" ref="myScheduler"/>
</bean>

或没有额外的豆

<bean id="someSchedulerTask" class="org.springframework.scheduling.concurrent.ScheduledExecutorTask">
        <!-- start after 60 seconds -->
        <property name="delay" value="6000"/>
        <!-- depends on the enviroment -->
        <property name="period">
            <bean class="java.lang.Long">
                <constructor-arg index="0" value="${period}"/>
            </bean>
        </property>
        <property name="runnable" ref="myScheduler"/>
</bean>

答案 1 :(得分:1)

${period}正在被视为String而不是${period}的值,即period被赋值为${period}

要使这些属性起作用,您需要Property Placeholder。将其添加到配置

<context:property-placeholder location='period.properties'/> 
// Edit location

然后你可以

<property name="period" value='${period}'/>

答案 2 :(得分:0)

可能发生的事情是你拼错了加载属性文件的类的完全限定名.Hens spring正在尝试将占位符字符串转换为“$ {period}”到int因此错误....

我曾经在使用代码时遇到同样的错误

              

两地都有拼写错误。