このバージョンはまだ開発中であり、まだ安定しているとは考えられていません。最新の安定バージョンについては、spring-cloud-task 3.3.0 を使用してください。 |
バッチ
このセクションでは、Spring Cloud Task と Spring Batch の統合について詳しく説明します。ジョブ実行とそれが実行されたタスク間の関連性を追跡します。
ジョブ実行をそれが実行されたタスクに関連付ける
Spring Boot は、Spring Boot Uber-jar 内でバッチジョブを実行するための機能を提供します。Spring Boot によるこの機能のサポートにより、開発者はその実行内で複数のバッチジョブを実行できます。Spring Cloud Task は、ジョブの実行 (ジョブ実行) をタスクの実行に関連付けて、一方を他方に追跡できるようにする機能を提供します。
Spring Cloud Task は、TaskBatchExecutionListener を使用してこの機能を実現します。デフォルトでは、このリスナーは、Spring Batch ジョブ (コンテキスト内で定義された型 Job の Bean を持つことによって) とクラスパス上の spring-cloud-task-batch jar の両方を持つコンテキストで自動的に設定されます。リスナーは、これらの条件を満たすすべてのジョブに挿入されます。
TaskBatchExecutionListener のオーバーライド
現在のコンテキスト内のバッチジョブにリスナーが挿入されないようにするには、標準の Spring Boot メカニズムを使用して自動構成を無効にします。
コンテキスト内の特定のジョブにのみリスナーを挿入するには、次の例に示すように、batchTaskExecutionListenerBeanPostProcessor をオーバーライドし、ジョブ Bean ID のリストを指定します。
public static TaskBatchExecutionListenerBeanPostProcessor batchTaskExecutionListenerBeanPostProcessor() {
TaskBatchExecutionListenerBeanPostProcessor postProcessor =
new TaskBatchExecutionListenerBeanPostProcessor();
postProcessor.setJobNames(Arrays.asList(new String[] {"job1", "job2"}));
return postProcessor;
}| サンプルバッチアプリケーションは、Spring Cloud Task プロジェクトのサンプルモジュール ( こちら) [GitHub] (英語) にあります。 |
バッチ情報メッセージ
Spring Cloud Task は、バッチジョブが情報メッセージを発行する機能を提供します。"Spring Batch イベント" セクションでは、この機能について詳しく説明します。
バッチジョブの終了コード
前に説明したように、Spring Cloud Task アプリケーションは、タスク実行の終了コードを記録する機能をサポートしています。ただし、タスク内で Spring Batch ジョブを実行する場合、バッチジョブの実行がどのように完了したかに関係なく、デフォルトのバッチ /Boot 動作を使用すると、タスクの結果は常に 0 になります。タスクは Boot アプリケーションであり、タスクから返される終了コードは Boot アプリケーションと同じであることに注意してください。この動作をオーバーライドして、バッチジョブが FAILED の BatchStatus を返したときにタスクがゼロ以外の終了コードを返せるようにするには、spring.cloud.task.batch.fail-on-job-failure を true に設定します。この場合、終了コードは 1 (デフォルト)、または指定された ExitCodeGenerator に基づくことができます)
この機能は、Spring Boot によって提供されるものを置き換える新しい ApplicationRunner を使用します。デフォルトでは、同じ順序で構成されます。ただし、ApplicationRunner の実行順序をカスタマイズする場合は、spring.cloud.task.batch.applicationRunnerOrder プロパティを設定することで順序を設定できます。タスクがバッチジョブの実行結果に基づいて終了コードを返すようにするには、独自の CommandLineRunner を作成する必要があります。