2
1

More than 3 years have passed since last update.

Spring 処理を定期的に実行する

Last updated at Posted at 2021-08-13

@Scheduledを使ってメソッドを定期的に動かす実装をしたので備忘録として

実装自体はとても簡単!

@SpringBootApplicationアノテーションが使用(ルーティング処理)されているアプリケーションクラスに

※Springでよく使うアノテーションまとめ(見やすかったのでリンク)→https://www.sria.co.jp/blog/2021/06/5712/

MyApplication.java
@SpringBootApplication 
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

@EnableSchedulingアノテーションをつける!
↓こんな感じ

MyApplication.java
@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について説明されててわかりやすい)

Scheduler.java
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

あとはメソッドの処理を書いて動きました〜!!
思ってたより簡単で参考記事が多く助かりました✌︎('ω'✌︎ )

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1