このバージョンはまだ開発中であり、まだ安定しているとは考えられていません。最新の安定バージョンについては、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 アプリケーションと同じであることに注意してください。この動作をオーバーライドして、バッチジョブが FAILEDBatchStatus を返したときにタスクがゼロ以外の終了コードを返せるようにするには、spring.cloud.task.batch.fail-on-job-failure を true に設定します。この場合、終了コードは 1 (デフォルト)、または指定された ExitCodeGenerator に基づくことができます)

この機能は、Spring Boot によって提供されるものを置き換える新しい ApplicationRunner を使用します。デフォルトでは、同じ順序で構成されます。ただし、ApplicationRunner の実行順序をカスタマイズする場合は、spring.cloud.task.batch.applicationRunnerOrder プロパティを設定することで順序を設定できます。タスクがバッチジョブの実行結果に基づいて終了コードを返すようにするには、独自の CommandLineRunner を作成する必要があります。