SpringBootタイミングタスクとタスクの並列実行の詳細


SpringBootを使用してタイミングタスクを作成するのは簡単で、いくつかの注釈を追加するだけでタイミングタスクを実現できます.
@Component
@EnableScheduling //          
public class TestJob {
 
    @Scheduled(cron = "0/10 * * * * ?")
    public void task1(){
        System.out.println("----   ----");
    }
 
    @Scheduled(fixedRate = 1000 * 10)
    public void task2(){
        System.out.println("----   ----");
    }
 
    @Scheduled(fixedDelay=1000)
    public void task3(){
        System.out.println("----   ----");
    }
}

上記のタイミングタスクでは、@Scheduled注記を使用してタスクの実行時間を設定し、3つのプロパティ構成を使用します.
  • fixedRate:間隔時間は前回のタスク開始時に計時された
  • fixedDelay:間隔時間は前回のミッション終了時から計時を開始する
  • です
  • cron:式によるタスク実行時間
  • の構成
    cron式の詳細
    1つのcron式には、少なくとも6つ(または7つ)のスペースで区切られた時間要素があります.次の順になります.
  • 秒(0~59)例えば0/5は5秒当たり
  • を示す.
  • 分(0~59)
  • 時間(0~23)
  • 日(0~31)のある日、
  • を計算する必要がある
  • 月(0~11)
  • 週数(1-7またはSUN/MON/TUE/WED/THU/FRI/SAT)
  • 年(1970-2099)
  • いくつかの式の例:
  • 「0 10,14,16*?」毎日午前10時、午後2時、4時
  • 「0/30 9-17*?」毎朝9時から夜5時まで30分ごとに
  • 「0 0 12?*WED」は毎週水曜日の昼12時
  • を表しています.
  • 「0 15 10*?」毎日午前10:15に
  • をトリガー
  • "0 15 10*?2005"2005年の毎日午前10:15に
  • をトリガー
  • 「0*14*?」は、毎日午後2時から午後2:59までの1分間に
  • をトリガーします.
  • "0/5 14*?"は、毎日午後2時から午後2:55までの5分間に
  • をトリガーします.
  • 「0/5 14,18**?」は、毎日午後2時から2:55までの期間と午後6時から6:55までの期間の5分ごとに
  • をトリガーします.
  • 「0-5 14*?」は、毎日午後2時から午後2:05までの1分間に
  • をトリガーします.
  • 「0 10,44 14?3 WED」毎年3月の水曜日の午後2:10と2:44に
  • をトリガー
  • "0 15 10?*MON-FRI"月曜日から金曜日の午前10:15に
  • をトリガー
  • 「0 15 10 15*?」毎月15日午前10:15に
  • をトリガー
  • 「0 15 10 L*?」毎月最終日の午前10:15トリガー0:15トリガー
  • "0 15 10?*6 L 2002-2005"2002年から2005年までの毎月の最後の金曜日午前10:15に
  • をトリガー
  • "0 15 10?*6#3"毎月の第3金曜日午前10:15に
  • をトリガー
    Springのタイミングタスクのデフォルトは単一スレッドで、別のスレッドを開いてタスクを実行することはありません.複数のタスクが前のタスクの実行が完了するのを待つ必要がある場合は、次のタスクを実行します.次に、マルチスレッド並列実行タスクを実装するクラスを追加します.実行時間になると、他のタスクの実行が完了するのを待つ必要がなく、タスクの実行を開始できます.
    package com.instudio.ebay.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.annotation.EnableScheduling;
    import org.springframework.scheduling.annotation.SchedulingConfigurer;
    import org.springframework.scheduling.config.ScheduledTaskRegistrar;
    
    import java.util.concurrent.Executor;
    import java.util.concurrent.Executors;
    
    @Configuration
    @EnableScheduling
    public class ScheduleConfig implements SchedulingConfigurer {
     
        @Override
        public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
            taskRegistrar.setScheduler(taskExecutor());
        }
     
        @Bean(destroyMethod="shutdown")
        public Executor taskExecutor() {
            return Executors.newScheduledThreadPool(20);
        }
    }
    

    上記を追加するだけで、複数のタスクを並列に実行できます.