我正在以这种方式在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
答案 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因此错误....
我曾经在使用代码时遇到同样的错误
两地都有拼写错误。