サーバ側で定期的に処理を行いたい場合、広く使われているのがCronですが、Springではスケジューリングに関する機能があります。このスケジューリング機能を使ってみましょう(参考: 28.4 Annotation Support for Scheduling and Asynchronous Execution)。
まず、スケジューリング機能を有効にします。@EnableSchedulingアノテーションを使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package net.teachingprogramming.mybootapp; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; @Configuration @EnableAutoConfiguration @ComponentScan @EnableScheduling public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } |
次に、定期的に実行したいメソッドに@Scheduledアノテーションをつけます。システムにDIされるオブジェクト(例えばコントローラー)ならばなんでもかまいません。ここでは、@Serviceを指定したクラスにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package net.teachingprogramming.mybootapp.service; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @Service public class ScheduledService { @Scheduled(fixedRate = 5000) public void fixedRate() { System.out.println("5000ms毎に実行"); } @Scheduled(cron="*/10 * * * * MON-FRI") public void cron() { System.out.println("平日に10秒ごと実行"); } } |
- 9行目: fixedRateで実行間隔を指定する。
- 14行目: cronでcrontabファイルと同様の記法で実行間隔を指定する。
これで定期的に実行されます。