15秒と5メートルなどの期間文字列と一緒に@Scheduledを使用する方法はありますか?

gstackoverflow:

私は私のコードに注釈を次のようしています

@Scheduled(fixedDelayString = "${app.delay}")

この場合で、私はこのような性質を持っている必要があります

app.delay=10000 #10 sec

私はミリ秒まで計算値を持っているので、Properyファイルが読めなくなります。

そこに5メートルまたは30代のように値を渡す方法はありますか?

g00glen00b:

私の知る限りでは、あなたが直接それを行うことはできません。しかし、春のブート構成プロパティが行う支援自動変換のようなパラメータの15s5mのを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());
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=362292&siteId=1
おすすめ