SpringBoot 定期処理を行うサンプル

SpringBootとSpring batchで定期処理を行うサンプルです。
(確認環境:Spring Boot 2.5,JDK 11)

目次

サンプル 定期処理の流れ / @EnableSchedulingを記述(SbRepeatApplication.java)
前回処理の開始時点を元に処理を開始(fixedRate)
  前回処理の終了時点を元に処理を開始(fixedDelay)
  初回の処理が始まるまでの時間(initialDelay)
  cron形式で指定

定期処理の流れ

作成するファイル

SbRepeatApplication.javaに@EnableSchedulingを追加します。
定期処理は、MainController.javaに記述しています。
cron形式の設定ではapplication.propertiesに記述しています。

githubにコードがあります。
https://github.com/ut23405/springboot/tree/master/springboot-repeat

 

@EnableSchedulingを記述(SbRepeatApplication.java)

SpringApplicationを開始するファイルに@EnableSchedulingアノテーションを追加します。

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class SbRepeatApplication {

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

}

 

前回処理の開始時点を元に処理を開始(fixedRate)

MainController.java

package com.example.demo;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class MainController {
	@Scheduled(fixedRate = 3000)
	public void output1() {
		System.out.println("こんにちは");
	}
}

前回処理の開始時点を元に3秒ごとに文字列が出力されていきます。3000はミリ秒で3秒です。

前回処理の終了時点を元に処理を開始(fixedDelay)

MainController.java

package com.example.demo;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class MainController {
	@Scheduled(fixedDelay = 3000)
	public void output1() {
		System.out.println("こんにちは");
	}
}

前回処理の終了時点を元に3秒ごとに文字列が出力されていきます。3000はミリ秒で3秒です。

初回の処理が始まるまでの時間(initialDelay)

MainController.java

package com.example.demo;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class MainController {
	@Scheduled(initialDelay = 3000, fixedDelay = 4000)
	public void output1() {
		System.out.println("こんにちは");
	}
}

initialDelayは初回の処理が始まるまでの時間です。3000はミリ秒で3秒です。

 

cron形式で指定

MainController.java

package com.example.demo;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class MainController {
	@Scheduled(cron = "${schedule.cron1}")
	public void output1() {
		System.out.println("こんにちは");
	}
}

 

application.properties

server.port = 8765
schedule.cron1 = */3 * * * * *
schedule.cron2 = */5 * * * * *

上記のcron1は3秒ごとに実行されます。スラッシュ(/)をつけるとその間隔で実行されます。

 

application.ymlの場合

server:
  port: 8765
schedule:
  cron1: "*/3 * * * * *"
  cron2: "*/5 * * * * *"

 

cronの設定値

cronの設定値は、以下のとおりです。

秒(0-59) 分(0-59) 時(0-23) 日(1-31) 月(1-12) 曜日(0-7)
schedule.cron1 = 0 0 15 * * *

上記は、毎日15時に実行します。
範囲指定(1-3)、カンマ区切りでの指定(1,2,3)、繰り返しの指定(*/1)(例:1分毎)もできます。

 

曜日の指定

曜日は、数値または英字の指定ができます。日曜日(sun)は0または7です。

0 1 2 3 4 5 6 7
sun mon tue wed thu fri sat sun
schedule.cron1 = 0 0 15 * * mon-wed

上記は、月から水曜日の15時に実行します。ハイフン(-)をつけるとその間実行されます。

 

ymlファイルの警告

ymlファイルで警告が出る場合は、カーソルを当ててCreate metadata~をクリックします。

以下は、SpringのScheduledアノテーションのリンクです。
https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/annotation/Scheduled.html

以下は、Springのcronの指定の詳細のリンクです。
https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronExpression.html#parse-java.lang.String-

関連の記事

SpringBoot batchでhello world(Tasklet)

△上に戻る