Springタスクスケジューラの手引き

Spring Task Schedulerのガイド

1. 概要

この記事では、Spring task scheduling mechanismsTaskSchedulerと、使用するさまざまなトリガーとともに事前に構築された実装について説明します。 Springでのスケジューリングについて詳しく知りたい場合は、@Async@Scheduledの記事を確認してください。

TaskScheulerはSpring 3.0で導入され、将来のある時点で実行されるさまざまなメソッドを備えています。また、ScheduledFutureインターフェイスの表現オブジェクトを返します。これを使用して、スケジュールされたタスクをキャンセルしたり、タスクが実行されているかどうかを確認したりできます。行われたかどうか。

実行する必要があるのは、スケジューリング用の実行可能なタスクを選択してから、適切なスケジューリングポリシーを選択することだけです。

2. ThreadPoolTaskScheduler

ThreadPoolTaskScheduler **は、タスクをScheduledExecutorServiceに委任し、TaskExecutorインターフェイスを実装するため、内部スレッド管理に最適です。そのため、その単一インスタンスは、非同期の潜在的な実行と@Scheduledアノテーション。

ThreadPoolTaskSchedulerConfigThreadPoolTaskScheduler Beanを定義しましょう:__

@Configuration
@ComponentScan(
  basePackages="org.example.taskscheduler",
  basePackageClasses={ThreadPoolTaskSchedulerExamples.class})
public class ThreadPoolTaskSchedulerConfig {

    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler(){
        ThreadPoolTaskScheduler threadPoolTaskScheduler
          = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.setPoolSize(5);
        threadPoolTaskScheduler.setThreadNamePrefix(
          "ThreadPoolTaskScheduler");
        return threadPoolTaskScheduler;
    }
}

構成されたBeanthreadPoolTaskSchedulerは、構成されたプールサイズ5に基づいて非同期でタスクを実行できます。

ThreadPoolTaskSchedulerに関連するすべてのスレッド名には、接頭辞ThreadPoolTaskSchedulerが付けられることに注意してください。

次にスケジュールできる簡単なタスクを実装しましょう。

class RunnableTask implements Runnable{
    private String message;

    public RunnableTask(String message){
        this.message = message;
    }

    @Override
    public void run() {
        System.out.println(new Date()+" Runnable Task with "+message
          +" on thread "+Thread.currentThread().getName());
    }
}

このタスクをスケジューラーによって実行されるように簡単にスケジュールできます。

taskScheduler.schedule(
  new Runnabletask("Specific time, 3 Seconds from now"),
  new Date(System.currentTimeMillis + 3000)
);

taskSchedulerは、現在の時刻からちょうど3秒後の既知の日付に、この実行可能なタスクをスケジュールします。

ここで、ThreadPoolTaskSchedulerのスケジューリングメカニズムについてもう少し詳しく見ていきましょう。

3. 固定遅延でRunnableタスクをスケジュールする

固定遅延を使用したスケジューリングは、2つの単純なメカニズムで実行できます。

3.1. 最後にスケジュールされた実行の固定遅延後のスケジューリング

1000ミリ秒の固定遅延後に実行するようにタスクを設定しましょう:

taskScheduler.scheduleWithFixedDelay(
  new RunnableTask("Fixed 1 second Delay"), 1000);

RunnableTaskは、1つの実行が完了してから次の実行が開始されるまで、常に1000ミリ秒後に実行されます。

3.2. 特定の日付の固定遅延後のスケジューリング

特定の開始時間の固定遅延後に実行するようにタスクを構成しましょう。

taskScheduler.scheduleWithFixedDelay(
  new RunnableTask("Current Date Fixed 1 second Delay"),
  new Date(),
  1000);

RunnableTaskは、指定された実行時間に呼び出されます。これは、主に@PostConstructメソッドが開始され、その後** 1000ミリ秒の遅延が発生する時間です。

4. 固定レートでのスケジューリング

固定レートで実行可能なタスクをスケジュールするための2つの単純なメカニズムがあります。

4.1. 固定レートでのRunnableTaskのスケジューリング

fixed rate of millisecondsで実行するタスクをスケジュールしましょう。

taskScheduler.scheduleAtFixedRate(
  new RunnableTask("Fixed Rate of 2 seconds") , 2000);

次のRunnableTaskは、実行中の最後の実行のステータスに関係なく、常に2000ミリ秒後に実行されます。

4.2. 指定された日付から固定レートでRunnableTaskをスケジュールする

taskScheduler.scheduleAtFixedRate(new RunnableTask(
  "Fixed Rate of 2 seconds"), new Date(), 3000);

RunnableTaskは、現在の時刻から3000ミリ秒後に実行されます。

5. CronTriggerを使用したスケジューリング

CronTriggerは、cron式に基づいてタスクをスケジュールするために使用されます。

CronTrigger cronTrigger
  = new CronTrigger("10 * * * * ?");

指定されたトリガーを使用して、特定の指定されたリズムまたはスケジュールに従ってタスクを実行できます。

taskScheduler.schedule(new RunnableTask("Cron Trigger"), cronTrigger);

この場合、RunnableTaskは毎分の10秒に実行されます。

6. PeriodicTriggerを使用したスケジューリング

fixed delayが2000ミリ秒のタスクをスケジュールするためにPeriodicTriggerを使用しましょう。

PeriodicTrigger periodicTrigger
  = new PeriodicTrigger(2000, TimeUnit.MICROSECONDS);

構成されたPeriodicTrigger Beanは、** 2000ミリ秒の固定遅延後にタスクを実行するために使用されます。

次に、PeriodicTriggerを使用してRunnableTaskをスケジュールします。

taskScheduler.schedule(
  new RunnableTask("Periodic Trigger"), periodicTrigger);

また、PeriodicTriggerを固定遅延ではなく固定レートで初期化するように構成することもできます。また、最初にスケジュールされたタスクの初期遅延を指定されたミリ秒単位で設定することもできます。

periodicTrigger bean:でreturnステートメントの前に2行のコードを追加するだけです。

periodicTrigger.setFixedRate(true);
periodicTrigger.setInitialDelay(1000);

setFixedRateメソッドを使用して、固定遅延ではなく固定レートでタスクをスケジュールし、次にsetInitialDelayメソッドを使用して、最初に実行可能なタスクのみの初期遅延を設定しました。

7. 結論

この簡単な記事では、Springのタスクサポートを使用して実行可能なタスクをスケジュールする方法を説明しました。

指定されたトリガーに従って、固定遅延で固定レートでタスクを実行することを検討しました。

そして、いつものように、コードはMavenプロジェクトover in GitHubとして利用できます。