はじめに
こんにちは!さいけです。
本記事は、「SpringBootで処理を定期実行させる方法」について紹介します。
SpringBootで処理を定期実行させる方法
@EnableSchedulingアノテーションをつける
まず、アプリケーションクラスに@EnableSchedulingをつけます。
これにより、アプリケーションの定期実行設定が有効になります。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class TaskApplication {
public static void main(String[] args) {
SpringApplication.run(TaskApplication.class, args);
}
}
@Scheduledアノテーションをつける
定期実行したいメソッドに@Scheduledをつけることにより、指定されたスケジューリングでメソッドが実行されるようになります。
また、定期実行するメソッドはvoid型でなければいけないのに注意です。
@Scheduledアノテーションのスケジューリング指定方法は色々あるので、以下に紹介します。
実行完了からn秒後に実行する
メソッド処理の実行完了からn秒後の実行を指定したい場合は、fixedDelayオプションを使います。
@Component
public class TaskController {
// メソッド処理の実行完了から5秒後に実行する
@Scheduled(fixedDelay = 5000)
public void taskFixedDelay() {
System.out.println("fixedDelay");
}
}
実行開始からn秒後に実行する
メソッド処理の実行完了からn秒後の実行を指定したい場合は、fixedRateオプションを使います。
@Component
public class TaskController {
// メソッド処理の実行開始から5秒後に実行する
@Scheduled(fixedRate = 5000)
public void taskFixedRate() {
System.out.println("fixedRate");
}
}
アプリケーション起動からn秒後に実行する
アプリケーションの起動からn秒後の実行を指定したい場合は、initialDelayオプションを使います。
@Component
public class TaskController {
// アプリケーションの起動から1秒後に実行する。(それ以降は実行開始から5秒後に定期実行する)
@Scheduled(initialDelay = 1000, fixedRate = 5000)
public void taskInitialDelay() {
System.out.println("initialDelay");
}
}
cronでスケジューリングを指定する
cronオプションでもスケジューリングを指定することができます。
@Component
public class TaskController {
// 毎分0秒時に実行する。
@Scheduled(cron = "0 * * * * *")
public void taskCron() {
System.out.println("cron");
}
}
設定ファイルからcronスケジューリングを指定する
application.ymlもしくはapplication.propertiesの設定ファイルからcronスケジューリングを指定することもできます。
application.yml
scheduler:
cron: 0 * * * * *
application.properties
scheduler.cron = 0 * * * * *
実行クラスのcronオプションで設定ファイルの値を指定します。
@Component
public class TaskController {
// 設定ファイルのスケジューリングを取得し実行する(毎分0秒時に実行する。)
@Scheduled(cron = "${scheduler.cron}")
public void taskCronSettingFile() {
System.out.println("cronSettingFile");
}
}
タイムゾーンを指定する
タイムゾーンを指定するには、zoneオプションを使います。
@Component
public class TaskController {
// 毎分0秒時に定期実行する。TimeZoneはAsia/Tokyo。
@Scheduled(cron = "0 * * * * *", zone = "Asia/Tokyo")
public void taskCronTimeZone() {
System.out.println("cronTimeZone");
}
}
おわりに
今回は「SpringBootで処理を定期実行させる方法」について紹介しました。
メソッドに@Scheduledをつけて、ちょっとオプションを指定するだけで簡単にスケジューリングができるので、是非参考にやってみてください。
備考
Just a moment...
コメント