@Scheduledを使ってメソッドを定期的に動かす実装をしたので備忘録として
実装自体はとても簡単!
@SpringBootApplicationアノテーションが使用(ルーティング処理)されているアプリケーションクラスに
※Springでよく使うアノテーションまとめ(見やすかったのでリンク)→https://www.sria.co.jp/blog/2021/06/5712/
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
@EnableSchedulingアノテーションをつける!
↓こんな感じ
@SpringBootApplication
@EnableScheduling
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
・参考記事たち
https://qiita.com/rubytomato@github/items/4f0c64eb9a24eaceaa6e
https://dev.classmethod.jp/articles/spring-boot-java-annotation-scheduled/
https://reasonable-code.com/spring-boot-scheduling-tasks/
https://blog.enjoyxstudy.com/entry/2017/02/19/000000
https://tech-lab.sios.jp/archives/10859
https://zenn.dev/sugaryo/books/spring-boot-run-up/viewer/scheduled_annotation
わかりやすい記事がたくさんありました〜
次に、定期的に実行したい処理に
@Scheduledアノテーションを付与する!
(クラスを作って@Componentアノテーションをつける※付与することでApplicationContextに登録され、DI対象のクラスとなる。)
(※あと、私は@Autowiredも使って実装しました。
このSpring入門記事はアノテーションやDIについて説明されててわかりやすい)
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class Scheduler {
@Scheduled(cron = "0 0 0 * * *", zone = "Asia/Tokyo")
public void doSomething() {
//定期的に実行したい処理
}
}
@Scheduled(cron = "0 0 0 * * *", zone = "Asia/Tokyo")
↑この部分の実装で毎日0時0分0秒にメソッドが実行される
私は、毎日同じ時間に処理を実行したかったのでこの書き方にしました。
この部分の実装方法は色々あるみたいで、、
↓cronの書き方(内容)はこの記事がわかりやすい
https://qiita.com/rubytomato@github/items/4f0c64eb9a24eaceaa6e
Scheduledで指定できるパターンは3つあるそう
fixedDelay : 前回タスクの実行完了時点から指定時間後にタスクを実行する。単位はms。
fixedRate : 前回タスクの実行開始時点から指定時間後にタスクを実行する。単位はms。
cron : 指定した周期でタスクを実行する。(Linuxのcronと似た書式)
設定ファイルで指定する方法もある
(※私は上記のScheduledで指定できるパターンのcronで実装、こっちはやってない)
↓書き方の違いはこの記事がわかりやすい
https://blog.enjoyxstudy.com/entry/2017/02/19/000000
あとはメソッドの処理を書いて動きました〜!!
思ってたより簡単で参考記事が多く助かりました✌︎('ω'✌︎ )