在使用Spring 3.0的定时任务注释功能时,我想将fixedDelay
设置为来自我的配置文件的参数,而不是像目前这样将其硬编码到我的任务类中。
@Scheduled(fixedDelay = 5000)
public void readLog() {
...
}
不幸的是,使用Spring表达式语言(SpEL)的@Value
似乎返回一个字符串对象,而这个字符串对象不能自动装箱为fixedDelay
参数所需的长整型值。
在使用Spring 3.0的定时任务注释功能时,我想将fixedDelay
设置为来自我的配置文件的参数,而不是像目前这样将其硬编码到我的任务类中。
@Scheduled(fixedDelay = 5000)
public void readLog() {
...
}
不幸的是,使用Spring表达式语言(SpEL)的@Value
似乎返回一个字符串对象,而这个字符串对象不能自动装箱为fixedDelay
参数所需的长整型值。
Spring v3.2.2增加了字符串参数以处理这个问题,fixedDelayString
、fixedRateString
和initialDelayString
现在也可用。
@Scheduled(fixedDelayString = "${my.fixed.delay.prop}")
public void readLog() {
...
}
您可以使用@Scheduled
注释,但仅与cron
参数一起使用:
@Scheduled(cron = "${yourConfiguration.cronExpression}")
您的5秒间隔可以表示为"*/5 * * * * *"
。然而据我所知,您无法提供少于1秒的精度。
我猜你不能使用@Scheduled
注解。所以,也许对你来说解决方案是使用task-scheduled
XML配置。我们来看一下这个例子(从Spring文档复制):
<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>
我没有尝试过这些设置,但希望它能对你有所帮助。
@Scheduled(fixedRateString = "${fixed-rate.in.milliseconds}")
public void fixedRate() {
// do something here
}
@Scheduled(fixedDelayString = "${fixed-delay.in.milliseconds}")
public void fixedDelay() {
// do something here
}
@Scheduled(cron = "${cron.expression}")
public void cronExpression() {
// do something here
}
application.properties
文件将如下所示:
fixed-rate.in.milliseconds=5000
fixed-delay.in.milliseconds=4000
cron.expression=0 15 5 * * FRI
就是这样。 这里有一篇详细解释任务调度的文章。
我想你可以通过定义一个bean来转换值。我没有尝试过,但是我认为以下类似的方法可能对你有用:
<bean id="FixedDelayLongValue" class="java.lang.Long"
factory-method="valueOf">
<constructor-arg value="#{YourConfigurationBean.stringValue}"/>
</bean>
其中:
<bean id="YourConfigurationBean" class="...">
<property name="stringValue" value="5000"/>
</bean>
@Scheduled
注解来完成它了。 - Grzegorz Oledzki