回答:
@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では、これを処理するために、元の3つの長いパラメーターに文字列パラメーターが追加されました。fixedDelayString
、fixedRateString
そしてinitialDelayString
現在も利用可能です。
@Scheduled(fixedDelayString = "${my.fixed.delay.prop}")
public void readLog() {
...
}
Spring Boot 2では、@Scheduled
アノテーションプロパティにSpring Expression Language(SpPL)を使用できます。
@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
アノテーションを使用してそれを行うことはできないと思います。