问题

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

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

不幸的是,似乎用Spring表达式语言(SpEL)@Value的方法返回了一个String对象,而该对象又无法按照fixedDelay参数的要求自动装入长值。


#1 热门回答(345 赞)

Spring v3.2.2已将String参数添加到原始的3个长参数中以处理此问题.fixedDelayString,fixedRateStringinitialDelayString现在也可用。

@Scheduled(fixedDelayString = "${my.fixed.delay.prop}")
public void readLog() {
        ...
}

#2 热门回答(47 赞)

你可以使用@Scheduled注释,但仅与cron参数一起使用:

@Scheduled(cron = "${yourConfiguration.cronExpression}")

你的5秒间隔可以表示为"*/5 * * * * *"。但据我了解,你不能提供不到1秒的精度。


#3 热门回答(25 赞)

我猜@Scheduled注释是不可能的。所以也许你的解决方案是使用task-scheduledXML配置。让我们考虑这个例子(复制自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>

同样,我没有尝试过任何这些设置,但我希望它可能对你有所帮助。


原文链接