こんにちは。 エキサイト株式会社の三浦です。
以前、Spring BootではScheduledを使うことで定期実行ができることを説明しましたが、今回は更に便利に使う方法について紹介します。
Spring BootのScheduled
以前、以下の記事でSpring BootのScheduledについて説明しました。
この記事では cron
を指定する方法のみ説明していますが、実は他にも指定方法があります。
それは、 fixedDelay
と fixedRate
です。
fixedDelay
を指定すると、「前回の実行が終了してから指定時間が経ったら、また実行を開始する」という方法で処理を行うことが出来ます。
// 1000ms間隔 @Scheduled(fixedDelay = 1000) public void sample() { // 処理 }
fixedRate
の場合、「前回の実行が開始してから指定時間が経ったら、また実行を開始する」という指定方法になります。
// 1000ms間隔 @Scheduled(fixedRate = 1000) public void sample() { // 処理 }
どちらも cron
では微妙に手が届かなかったことができるようになります。
特に fixedDelay
は、Spring Boot側で終了を待ってから間隔の計測を始めてくれるので、かなり重宝するのではないでしょうか。
ただしこちら、少し扱いづらい部分があります。
コードサンプルのコメントでも書きましたが、デフォルトだと間隔指定がミリ秒単位となっているのです。
このままでは、例えば分単位・時間単位の間隔で実行したい場合に、かなり分かりづらくなってしまいます。
ScheduledとTimeUnit
ですが幸い、Scheduledではそれを解消できる手が用意されています。
それは TimeUnit
です。
以下のように指定すれば、ミリ秒以外の単位で間隔を指定できるようになります。
// 1秒間隔 @Scheduled(timeUnit = TimeUnit.SECONDS, fixedDelay = 1) public void sampleForSeconds() { // 処理 } // 1分間隔 @Scheduled(timeUnit = TimeUnit.MINUTES, fixedDelay = 1) public void sampleForMinutes() { // 処理 }
これ以外にも、時間単位等でも指定できます。
ミリ秒だけで指定するのに比べて、相当分かりやすくなっていると言って良いでしょう。
最後に
Scheduledは fixedDelay
や TimeUnit
が存在することで、単に「サーバの cron
の代わりにアプリケーションコード上に定期実行間隔を書くことができる」という以上に使いやすいものになっていると思います。
是非一度、使ってみることをおすすめします。