当使用Spring 3.0功能注释计划任务时,我想从配置文件中将fixedDelay设置为参数,而不是像当前那样将其硬连接到任务类中...

@Scheduled(fixedDelay = 5000)
public void readLog() {
        ...
}

不幸的是,似乎使用Spring Expression Language(SpEL)的方式@Value返回了一个String对象,该对象又不能按照fixedDelay参数的要求自动装箱成一个长值。

最佳答案

我想@Scheduled注释是毫无疑问的。因此,可能适合您的解决方案是使用task-scheduled XML配置。让我们考虑以下示例(从Spring doc复制):

<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="someObject" method="readLog"
               fixed-rate="#{YourConfigurationBean.stringValue}"/>
</task:scheduled-tasks>

...或者如果从String到Long的转换不起作用,则类似以下内容:
<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="someObject" method="readLog"
            fixed-rate="#{T(java.lang.Long).valueOf(YourConfigurationBean.stringValue)}"/>
</task:scheduled-tasks>

同样,我还没有尝试过这些设置中的任何一个,但是我希望它可以对您有所帮助。

10-06 13:18