.yml
という異なる構成プロパティを使用して、1つの@Scheduled
ジョブを実装したいと思っています。yamlファイルの複数のcron式を使用した@Scheduledタスク
手段私のYAMLファイルで、私はリストとしてcron expression
について説明します。
job:
schedules:
- 10 * * * * *
- 20 * * * * *
私はコンフィギュレーションを使用してこれらの値を読み出してscheduled
という名前@Bean
を作成しました:私の仕事のクラスで
@Configuration
@ConfigurationProperties(prefix="job", locations = "classpath:cronjob.yml")
public class CronConfig {
private List<String> schedules;
@Bean
public List<String> schedules() {
return this.schedules;
}
public List<String> getSchedules() {
return schedules;
}
public void setSchedules(List<String> schedules) {
this.schedules = schedules;
}
}
私は1つの方法の実行を開始したいが、私の設定の両方のスケジュールの実行を希望する。このソリューションで
@Scheduled(cron = "#{@schedules}")
public String execute() {
System.out.println(converterService.test());
return "success";
}
アプリケーションがエラーを作成します(多かれ少なかれクリア)
Encountered invalid @Scheduled method 'execute': Cron expression must consist of 6 fields (found 12 in "[10 * * * * *, 20 * * * * *]")
のcron式の複数の宣言と同じスケジュールされたジョブ方式を設定する方法はありますか?いくつかの後
EDIT 1
は、私はちょうど実行者法上の第2のアノテーションを使用してみてください。
@Scheduled(cron = "#{@schedules[0]}")
@Scheduled(cron = "#{@schedules[1]}")
public String execute() {
System.out.println(converterService.test());
return "success";
}
このソリューションは機能しますが、実際は動的ではありません。このダイナミックにする方法もありますか?あなたが実際にこれを行うことができます
あなたの答えをありがとう。はい、クォーツが解決策になるかもしれません。解決策の解決策を使って質問を編集しました。この回避策を構築するための他のソリューションがあるかどうか考えていますか? – Patrick
@Patrick私はちょうどエレガントな解決策を見つけ、完全な実例で答えを修正しました – dimitrisli