gstackoverflow:
私は私のコードに注釈を次のようしています
@Scheduled(fixedDelayString = "${app.delay}")
この場合で、私はこのような性質を持っている必要があります
app.delay=10000 #10 sec
私はミリ秒まで計算値を持っているので、Properyファイルが読めなくなります。
そこに5メートルまたは30代のように値を渡す方法はありますか?
g00glen00b:
私の知る限りでは、あなたが直接それを行うことはできません。しかし、春のブート構成プロパティが行う支援自動変換のようなパラメータの15s
と5m
のをDuration
。
これは、ユーザーが作成できることを意味@ConfigurationProperties
このようなクラスを:
@Component
@ConfigurationProperties("app")
public class AppProperties {
private Duration delay;
// Setter + Getter
}
あなたが使用することができますので、また、Springの式言語でBean参照を内@Scheduled
のアノテーションは、このような何かを行うことができます。
@Scheduled(fixedDelayString = "#{@appProperties.getDelay().toMillis()}")
public void schedule() {
log.info("Scheduled");
}
また、あなたはプログラム的にタスクを追加することができますTaskScheduler
。その利点は、あなたがより多くのコンパイル時の安全性を持っており、それはあなたが仕事にできることですDuration
直接:
@Bean
public ScheduledFuture<?> schedule(TaskScheduler scheduler, AppProperties properties) {
return scheduler.scheduleWithFixedDelay(() -> log.info("Scheduled"), properties.getDelay());
}