Spring Bootでtaskを定期的に実行する方法
下記の環境で動作確認を行いました。
下記のサイトを参考にさせて頂きました。
Spring
スケジュールを有効にするにはEnableSchedulingを使用します。
package com.example.actor;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
initialDelay
@Scheduled(initialDelay = 60000, fixedRate = 5000)
public void doSomething() {
//...
毎分0秒時にdoSomething()を実行する。
@Scheduled(cron = "0 * * * * *", zone = "Asia/Tokyo")
public void doSomething() {
//...
cronの実行スケジュールを設定ファイルに記述し、それをプログラムから参照するようにします。
下記のように設定ファイル(application.yml)に実行スケジュールを定義します。
この例ではキー名をcron
としました。(名前は任意です。)
application.yml
cron:
cron1: 0 * * * * MON-FRI
cron2: 0 */2 * * * *
Scheduledアノテーションのcronフィールドに、設定値をspelで記述します。
ScheduledTasks.java
@Component
public class ScheduledTasks {
@Scheduled(cron = "${cron.cron1}")
public void doSomething() {
//...
cronメモ
左から秒(0-59)、分(0-59)、時(0-23)、日(1-31)、月(1-12)、曜日(0:日,1:月,2:火,3:水,4:木,5:金,6:土,7:日)を設定する。月、曜日は英語で3文字の短縮形が使用できる。