219
227

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Spring Bootでtaskを定期実行する方法

Last updated at Posted at 2015-07-29

概要

Spring Bootでtaskを定期的に実行する方法

環境

下記の環境で動作確認を行いました。

  • Windows7 (64bit)
  • Java 1.8.0_45
  • Spring Boot 1.2.4
  • Maven 3.3.3

参考

下記のサイトを参考にさせて頂きました。

Spring

設定

EnableSchedulingアノテーション

スケジュールを有効にするにはEnableSchedulingを使用します。

App.java
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);
  }
}

Scheduledアノテーション

定期実行したいtaskに実行周期をScheduledアノテーションで指定します。
このアノテーションが指定できるのは引数を取らないメソッドだけです。(コンパイルエラーにはなりませんが実行時に例外が発生します。)

field description
fixedDelay taskの実行完了時点から指定時間後に次のtaskを実行する. 単位はms.
fixedRate taskの実行開始時点から指定時間後に次のtaskを実行する. 単位はms.
initialDelay 指定時間後に最初のtaskを開始する. 単位はms. fixedDelay又はfixedRateと組み合わせて使用する.
cron cronで指定した周期でtaskを実行する.
zone cronの起動時間のタイムゾーンを指定する. 未指定時はデフォルトのtimezoneを使用する.

do()の実行完了の5秒後に次のdo()を実行する。

fixedDelay
@Scheduled(fixedDelay = 5000)
public void do() {
  //...
}

doSomething()の実行開始の5秒後に次のdoSomething()を実行する。

fixedRate
@Scheduled(fixedRate = 5000)
public void doSomething() {
  //...
}

spring bootの起動から60秒経過後にdoSomething()を実行する。

initialDelay
@Scheduled(initialDelay = 60000, fixedRate = 5000)
public void doSomething() {
  //...
}

毎分0秒時にdoSomething()を実行する。

cron
@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文字の短縮形が使用できる。

cron description
0 0 * * * * 毎時、0分0秒時に実行.
0 0 0 * * * 毎日、0時0分0秒に実行.
0 0 0 1 * * 毎月、1日0時0分0秒に実行.
0 0 12 */5 * * 毎月、5の倍数の日の12時0分0秒に実行.
0 0 9-18 * * 1-5 月から金曜日の9時から18時の0分0秒時に実行.
219
227
3

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
219
227

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?