Answers:
我想@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>
同样,我还没有尝试过任何这些设置,但希望对您有所帮助。
Spring v3.2.2已将String参数添加到原始的3个long参数中以处理此问题。fixedDelayString
,fixedRateString
而initialDelayString
现在可以了。
@Scheduled(fixedDelayString = "${my.fixed.delay.prop}")
public void readLog() {
...
}
在Spring Boot 2中,我们可以将Spring Expression Language(SpPL)用于@Scheduled
注释属性:
@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
当时无法使用注释。