はじめに
こんにちは!
今回は、Spring Frameworkで定期的なタスクを簡単に実行できる@Scheduled
アノテーションについてお話しします。これを使うことで、バッチ処理や定期実行タスクがとっても簡単に実装できるんです!
@Scheduledって何?
@Scheduledとは
「Springが提供する、定期実行タスクを設定するためのアノテーション」 のことです。
例えば、毎日深夜にデータをバックアップしたり、毎週月曜日にレポートを自動生成したい時に役立ちます。
こんな感じの処理ができます:
- 毎日同じ時間に処理を実行
- 数分おきにデータを更新
- 特定の曜日にバッチ処理を走らせる
それでは、実際に@Scheduled
を使った例を見ていきましょう!
基本的な使い方
1. 初期設定
まず、@Scheduled
を有効にするために、メインクラスまたは設定クラスに以下を追加します。
@SpringBootApplication
@EnableScheduling
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
2. 簡単な定期実行タスク
次に、タスクを実装していきます。
@Component
public class ScheduledTasks {
@Scheduled(fixedRate = 5000) // 5秒ごとに実行
public void performTask() {
System.out.println("5秒ごとのタスク実行中:" + new Date());
}
}
説明:
@Scheduled(fixedRate = 5000)
は、5秒おきにメソッドを実行する設定です。- つまり、このコードを起動すると、コンソールに5秒ごとにメッセージが表示されます。
@Scheduledの使い方【応用編】
ここからは、@Scheduled
の応用テクニックを紹介します!
1. fixedRate vs fixedDelay
オプション | 説明 |
---|---|
fixedRate | 前のタスクの開始から次のタスクの開始までの間隔 |
fixedDelay | 前のタスクの終了から次のタスクの開始までの間隔 |
@Scheduled(fixedRate = 10000) // 10秒ごとに実行(タスク開始基準)
public void taskWithFixedRate() {
System.out.println("fixedRateタスク:" + new Date());
}
@Scheduled(fixedDelay = 10000) // 10秒ごとに実行(タスク終了基準)
public void taskWithFixedDelay() {
System.out.println("fixedDelayタスク:" + new Date());
}
2. 初期遅延(initialDelay)
タスクの開始を遅らせたい時は initialDelay
を使用します。
@Scheduled(initialDelay = 5000, fixedRate = 10000) // 5秒待ってから10秒ごとに実行
public void taskWithInitialDelay() {
System.out.println("initialDelayタスク:" + new Date());
}
3. cron式でスケジュール設定
複雑なスケジュールを設定したい場合、cron式が便利です。
@Scheduled(cron = "0 0 12 * * ?") // 毎日正午に実行
public void cronTask() {
System.out.println("cronタスク:" + new Date());
}
cron式の基本構文:
秒 分 時 日 月 曜日 年(省略可能)
記号 | 説明 | 例 |
---|---|---|
* | 任意の値 | – |
? | 特定しない(日・曜日) | – |
0 0 12 * * ? | 毎日正午 | – |
0 15 10 * * MON | 毎週月曜10:15 | – |
よく使うcronパターン:
- 毎時00分に実行:
0 0 * * * ?
- 毎日深夜1時に実行:
0 0 1 * * ?
- 平日の9時に実行:
0 0 9 * * MON-FRI
@Scheduledの引数
1. fixedRate属性
タスクを一定間隔で繰り返し実行します。
@Scheduled(fixedRate = 60000) // 1分ごとに実行
public void fixedRateTask() {
System.out.println("1分ごとの定期タスク");
}
2. fixedDelay属性
前のタスクが終わってから一定時間後に次のタスクを開始します。
@Scheduled(fixedDelay = 60000) // 1分後に次のタスクを開始
public void fixedDelayTask() {
System.out.println("fixedDelayタスク");
}
3. cron属性
cron式で複雑なスケジュールを設定できます。
@Scheduled(cron = "0 0/30 * * * ?") // 毎時30分おきに実行
public void cronScheduledTask() {
System.out.println("30分おきのcronタスク");
}
まとめ
今回は、Springの@Scheduled
アノテーションについて詳しく解説しました。@Scheduled
を使うことで、面倒な定期処理が簡単に実装できるようになります。ぜひ、この知識を活かして、効率的なバッチ処理やメンテナンススクリプトを作成してみてください!
もっと詳しく知りたい方は、Spring公式ドキュメントを見てみてくださいね。
他の記事が見たい方はこちら!↓↓↓
@GroupSequenceの使い方と引数を徹底解説!【初心者向け】
@AssertTrueと@AssertFalseの使い方と違いを徹底解説!【初心者向け】
@Max, @Min, @Sizeアノテーションの使い方と違いを解説!【初心者向け】