Spring Boot のスケジューリング機能を使って、処理を定期的に実行する方法を書いていきます。
目次
- 起動クラスの作成
- fixedRateのタスクを作成
- cronのタスクを作成
- ビルドファイルの作成
- 動作確認
バージョン
動作確認で使用した製品のバージョンは以下の通りです。
1. 起動クラスの作成
以下のアプリ起動クラスを作成します。
src/main/java/org/example/SpringApp.java
package org.example; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @EnableScheduling @SpringBootApplication public class SpringApp { public static void main(String[] args) { SpringApplication.run(SpringApp.class, args); } }
アノテーション @EnableScheduling
を付けて、スケジューリング機能を有効にします。
2. fixedRateのタスクを作成
アノテーション @Scheduled(fixedRate=ミリ秒)
を使うと、メソッドが一定間隔で実行されます。
src/main/java/org/example/schedule/FixedRateTask.java
package org.example.schedule; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class FixedRateTask { private DateTimeFormatter fmt = DateTimeFormatter.ofPattern("HH:mm:ss"); // 5秒毎に実行 @Scheduled(fixedRate=5000) public void reportTime() { System.out.print("fixedRate="); System.out.println( LocalDateTime.now().format(fmt) ); } }
アノテーション @Component
を付けて、Spring にオブジェクトを管理してもらいます。
3. cronのタスクを作成
アノテーション @Scheduled(cron="定義")
を使うと、cronのように実行することができます。
src/main/java/org/example/schedule/CronTask.java
package org.example.schedule; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class CronTask { private DateTimeFormatter fmt = DateTimeFormatter.ofPattern("HH:mm:ss"); // 0秒時に実行(1分毎) @Scheduled(cron="0 * * * * *") public void reportTime() { System.out.print("cron="); System.out.println( LocalDateTime.now().format(fmt) ); } }
定義するフィールドは6つで、左から右に以下の通りです。
- 秒
- 分
- 時
- 日
- 月
- 曜日
値の詳細は、Spring の JavaDoc に記載されています。
CronExpression - docs.spring.io
4. ビルドファイルの作成
Mavenのビルドファイルは以下の通りです。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>org.example</groupId> <artifactId>spring-schedule</artifactId> <version>1.0.0</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
5. 動作確認
アプリ起動クラスを実行すると、指定した間隔で時刻が表示されます。
fixedRate=01:04:59 cron=01:05:00 fixedRate=01:05:04 fixedRate=01:05:09 ...