SpringBootタイミングタスクとタスクの並列実行の詳細
8752 ワード
SpringBootを使用してタイミングタスクを作成するのは簡単で、いくつかの注釈を追加するだけでタイミングタスクを実現できます.
上記のタイミングタスクでは、@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のタイミングタスクのデフォルトは単一スレッドで、別のスレッドを開いてタスクを実行することはありません.複数のタスクが前のタスクの実行が完了するのを待つ必要がある場合は、次のタスクを実行します.次に、マルチスレッド並列実行タスクを実装するクラスを追加します.実行時間になると、他のタスクの実行が完了するのを待つ必要がなく、タスクの実行を開始できます.
上記を追加するだけで、複数のタスクを並列に実行できます.
@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つのプロパティ構成を使用します.
cron式の詳細
1つのcron式には、少なくとも6つ(または7つ)のスペースで区切られた時間要素があります.次の順になります.
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);
}
}
上記を追加するだけで、複数のタスクを並列に実行できます.