1. ホーム
  2. java

[解決済み] Spring 3.0の式言語で@Scheduled(fixedDelay)をパラメータ化する方法とは?

2022-05-25 16:03:20

質問

Spring 3.0の機能を使ってスケジュールされたタスクにアノテーションを付ける場合、そのタスクに fixedDelay を設定ファイルからパラメータとして設定したいのですが、現在のようにタスククラスにハードワイヤリングするのではなく...。

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

残念ながら、Spring Expression Language (SpEL) の手段では @Value はStringオブジェクトを返しますが、このStringオブジェクトは fixedDelay パラメータで要求されるような長い値にオートボックスすることができません。

どのように解決するのですか?

私は @Scheduled アノテーションは問題外です。そこで、おそらくあなたにとっての解決策は task-scheduled XMLコンフィギュレーションを使用することです。次の例を見てみましょう。 春のドキュメント ):

<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>

繰り返しになりますが、これらの設定はどれも試していませんが、少しは参考になるかと思います。