バージョン 3.0.4

© 2009-2022 VMware, Inc. All rights reserved.

このドキュメントのコピーは、あなた自身の使用および他者への配布のために作成することができますが、そのようなコピーに料金を請求しないこと、さらに、印刷物または電子的に配布されるかどうかにかかわらず、各コピーにこの著作権表示が含まれていることを条件とします。

序文

このセクションでは、Spring Cloud Task リファレンスドキュメントの概要を説明します。これをドキュメントの残りの部分のマップとして考えてください。このリファレンスガイドは直線的に読むこともでき、興味のないセクションはスキップすることもできます。

1. ドキュメントについて

Spring Cloud Task リファレンスガイドは、htmlpdf (英語) epub で入手できます。最新版は docs.spring.io/spring-cloud-task/docs/current-SNAPSHOT/reference/html/ で入手できます。

このドキュメントのコピーは、あなた自身の使用および他者への配布のために作成することができますが、そのようなコピーに料金を請求しないこと、さらに、印刷物または電子的に配布されるかどうかにかかわらず、各コピーにこの著作権表示が含まれていることを条件とします。

2. ヘルプの利用

Spring Cloud Task に問題がありますか? お手伝いします!

Spring Cloud Task はドキュメントも含めてすべてオープンソースです。ドキュメントに問題を見つけた場合、または単にドキュメントを改善したい場合は、参加してください [GitHub] (英語)

3. ファーストステップ

Spring Cloud Task または "Spring" 全般を始めたばかりの場合は、入門の章を読むことをお勧めします。

最初から始めるには、次のセクションを参照してください。

チュートリアルに従うには、初めての Spring Cloud Task アプリケーションの開発を参照してください。
例を実行するには、サンプルの実行を参照してください。

入門

Spring Cloud Task を始めたばかりの場合は、このセクションを参照してください。ここでは、基本的な「何を ? 」「どのように ? 」「なぜ ? 」に回答します。質問。Spring Cloud Task についての穏やかな導入から始めます。次に、いくつかの核となる原則について話し合いながら、Spring Cloud Task アプリケーションを構築します。

4. Spring Cloud Task の導入

Spring Cloud Task を使用すると、存続期間の短いマイクロサービスを簡単に作成できます。有効期間の短い JVM プロセスを本番環境でオンデマンドで実行できる機能を提供します。

5. システム要件

Java がインストールされている必要があります (Java 17 以降)。ビルドするには、Maven もインストールする必要があります。

5.1. データベース要件

Spring Cloud Task は、リレーショナルデータベースを使用して、実行されたタスクの結果を保存します。データベースがなくてもタスクの開発を開始できますが (タスクのステータスはタスクリポジトリの更新の一部としてログに記録されます)、運用環境では、サポートされているデータベースを使用する必要があります。Spring Cloud Task は現在、次のデータベースをサポートしています。

  • DB2

  • H2

  • HSQLDB

  • MySql

  • Oracle

  • Postgres

  • SqlServer

6. 初めての Spring Cloud Task アプリケーションの開発

始めるには、シンプルな "Hello, World!" アプリケーションから始めるのが良いでしょう。そこで、フレームワークの機能を強調するために、Spring Cloud Task と同等のアプリケーションを作成します。ほとんどの IDE は Apache Maven を適切にサポートしているため、このプロジェクトのビルドツールとして使用します。

spring.io Web サイトには、Spring Boot を使用する "Getting Started" ガイドが多数含まれています。特定の問題を解決する必要がある場合は、まずそこを確認してください。Spring Initializr に移動して新しいプロジェクトを作成すると、次の手順を短縮できます。これにより、新しいプロジェクト構造が自動的に生成されるため、すぐにコーディングを開始できます。Spring Initializr に慣れるために、試してみることをお勧めします。

6.1. Spring Initializr を使用した Spring タスクプロジェクトの作成

これで、Hello, World! をコンソールに出力するアプリケーションを作成してテストできるようになりました。

そうするために:

  1. Spring イニシャル zr サイトにアクセスしてください。

    1. グループ名が io.spring.demo成果物名が helloworld の新しい Maven プロジェクトを作成します。

    2. 依存関係 テキストボックスに " task " と入力し、Cloud Task 依存関係を選択します。

    3. 依存関係 テキストボックスに " jdbc " と入力し、JDBC 依存関係を選択します。

    4. 依存関係 テキストボックスに h2 と入力し、H2 を選択します。(またはお気に入りのデータベース)

    5. "プロジェクトを生成する " ボタンをクリックします

  2. helloworld.zip ファイルを解凍し、プロジェクトをお気に入りの IDE にインポートします。

6.2. コードの作成

アプリケーションを完成するには、タスクを起動できるように、生成された HelloworldApplication を次の内容で更新する必要があります。

package io.spring.Helloworld;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.task.configuration.EnableTask;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
@EnableTask
public class HelloworldApplication {

    @Bean
    public ApplicationRunner applicationRunner() {
        return new HelloWorldApplicationRunner();
    }

    public static void main(String[] args) {
        SpringApplication.run(HelloworldApplication.class, args);
    }

    public static class HelloWorldApplicationRunner implements ApplicationRunner {

        @Override
        public void run(ApplicationArguments args) throws Exception {
            System.out.println("Hello, World!");

        }
    }
}

小さいように見えるかもしれませんが、かなりのことが起こっています。Spring Boot の詳細については、"Spring Boot リファレンスドキュメント" を参照してください。

これで、src/main/resources で application.properties ファイルを開くことができます。application.properties で 2 つのプロパティを設定する必要があります。

  • application.name: アプリケーション名を設定するには (これはタスク名に変換されます)

  • logging.level: 何が起こっているかを把握するために、Spring Cloud Task のログを DEBUG に設定します。

次の例は、両方を行う方法を示しています。

logging.level.org.springframework.cloud.task=DEBUG
spring.application.name=helloWorld

6.2.1. タスクの自動構成

Spring Cloud Task Starter 依存関係を含めると、タスクはすべての Bean がその機能をブートストラップするように自動構成します。この構成の一部では、TaskRepository とその使用のためのインフラストラクチャを登録します。

デモでは、TaskRepository は組み込みの H2 データベースを使用してタスクの結果を記録します。H2 DB はタスクが終了すると消滅するため、この H2 組み込みデータベースは運用環境にとって実用的なソリューションではありません。ただし、簡単に開始するために、この例でこれを使用するだけでなく、そのリポジトリで更新されている内容をログにエコーすることもできます。構成セクション (このドキュメントの後半) では、Spring Cloud Task によって提供される要素の構成をカスタマイズする方法について説明します。

サンプルアプリケーションが実行されると、Spring Boot は HelloWorldCommandLineRunner を起動し、"Hello, World!" を出力します。標準出力へのメッセージ。TaskLifecycleListener は、タスクの開始と終了をリポジトリに記録します。

6.2.2. 主なメソッド

main メソッドは、java アプリケーションへのエントリポイントとして機能します。私たちのメインメソッドは Spring Boot の SpringApplication クラスにデリゲートします。

6.2.3. ApplicationRunner

Spring には、アプリケーションのロジックをブートストラップするための多くの方法が含まれています。Spring Boot は、*Runner インターフェース (CommandLineRunner または ApplicationRunner) を通じて、組織的な方法でこれを行うための便利な方法を提供します。適切に動作するタスクは、これら 2 つのランナーのいずれかを使用して任意のロジックをブートストラップできます。

タスクのライフサイクルは、*Runner#run メソッドが実行される前から、すべてのメソッドが完了するまで考慮されます。Spring Boot では、Spring Cloud Task と同様に、アプリケーションで複数の *Runner 実装を使用できます。

CommandLineRunner または ApplicationRunner 以外のメカニズムから (たとえば InitializingBean#afterPropertiesSet を使用して) ブートストラップされた処理は、Spring Cloud Task によって記録されません。

6.3. サンプルの実行

この時点で、アプリケーションは動作するはずです。このアプリケーションは Spring Boot ベースであるため、次の例 (その出力とともに) に示すように、アプリケーションのルートから $ mvn spring-boot:run を使用してコマンドラインから実行できます。

$ mvn clean spring-boot:run
....... . . .
....... . . . (Maven log output here)
....... . . .

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.3.RELEASE)

2018-07-23 17:44:34.426  INFO 1978 --- [           main] i.s.d.helloworld.HelloworldApplication   : Starting HelloworldApplication on Glenns-MBP-2.attlocal.net with PID 1978 (/Users/glennrenfro/project/helloworld/target/classes started by glennrenfro in /Users/glennrenfro/project/helloworld)
2018-07-23 17:44:34.430  INFO 1978 --- [           main] i.s.d.helloworld.HelloworldApplication   : No active profile set, falling back to default profiles: default
2018-07-23 17:44:34.472  INFO 1978 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@1d24f32d: startup date [Mon Jul 23 17:44:34 EDT 2018]; root of context hierarchy
2018-07-23 17:44:35.280  INFO 1978 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2018-07-23 17:44:35.410  INFO 1978 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2018-07-23 17:44:35.419 DEBUG 1978 --- [           main] o.s.c.t.c.SimpleTaskConfiguration        : Using org.springframework.cloud.task.configuration.DefaultTaskConfigurer TaskConfigurer
2018-07-23 17:44:35.420 DEBUG 1978 --- [           main] o.s.c.t.c.DefaultTaskConfigurer          : No EntityManager was found, using DataSourceTransactionManager
2018-07-23 17:44:35.522 DEBUG 1978 --- [           main] o.s.c.t.r.s.TaskRepositoryInitializer    : Initializing task schema for h2 database
2018-07-23 17:44:35.525  INFO 1978 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executing SQL script from class path resource [org/springframework/cloud/task/schema-h2.sql]
2018-07-23 17:44:35.558  INFO 1978 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executed SQL script from class path resource [org/springframework/cloud/task/schema-h2.sql] in 33 ms.
2018-07-23 17:44:35.728  INFO 1978 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-07-23 17:44:35.730  INFO 1978 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Bean with name 'dataSource' has been autodetected for JMX exposure
2018-07-23 17:44:35.733  INFO 1978 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Located MBean 'dataSource': registering with JMX server as MBean [com.zaxxer.hikari:name=dataSource,type=HikariDataSource]
2018-07-23 17:44:35.738  INFO 1978 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 0
2018-07-23 17:44:35.762 DEBUG 1978 --- [           main] o.s.c.t.r.support.SimpleTaskRepository   : Creating: TaskExecution{executionId=0, parentExecutionId=null, exitCode=null, taskName='application', startTime=Mon Jul 23 17:44:35 EDT 2018, endTime=null, exitMessage='null', externalExecutionId='null', errorMessage='null', arguments=[]}
2018-07-23 17:44:35.772  INFO 1978 --- [           main] i.s.d.helloworld.HelloworldApplication   : Started HelloworldApplication in 1.625 seconds (JVM running for 4.764)
Hello, World!
2018-07-23 17:44:35.782 DEBUG 1978 --- [           main] o.s.c.t.r.support.SimpleTaskRepository   : Updating: TaskExecution with executionId=1 with the following {exitCode=0, endTime=Mon Jul 23 17:44:35 EDT 2018, exitMessage='null', errorMessage='null'}

前述の出力には、ここで興味深い 3 行があります。

  • SimpleTaskRepository は、エントリの作成を TaskRepository に記録しました。

  • "Hello, World!" によって示される CommandLineRunner の実行。出力。

  • SimpleTaskRepository はタスクの完了を TaskRepository に記録します。

簡単なタスクアプリケーションは、ここの Spring Cloud Task プロジェクトのサンプルモジュールにあります。

機能

このセクションでは、Spring Cloud Task の使用方法、設定方法、適切な拡張ポイントなど、Spring Cloud Task について詳しく説明します。

7. Spring Cloud Task のライフサイクル

ほとんどの場合、最新のクラウド環境は、終了が予想されないプロセスの実行を中心に設計されています。終了した場合、通常は再起動されます。ほとんどのプラットフォームには、終了時に再起動されないプロセスを実行する何らかの方法がありますが、通常、その実行結果は消耗的な方法で維持されません。Spring Cloud Task は、環境内で短期間のプロセスを実行し、結果を記録する機能を提供します。そうすることで、メッセージによるタスクの統合を通じて、存続期間の短いプロセスだけでなく、長時間実行されるサービスを中心としたマイクロサービスアーキテクチャが可能になります。

この機能はクラウド環境では便利ですが、従来の デプロイモデルでも同じ問題が発生する可能性があります。cron などのスケジューラーを使用して Spring Boot アプリケーションを実行する場合、完了後にアプリケーションの結果を監視できると便利です。

Spring Cloud Task は、Spring Boot アプリケーションが開始と終了を持ちながらも成功できるというアプローチを採用しています。バッチアプリケーションは、終了が予想されるプロセス (多くの場合、有効期間が短い) がどのように役立つかを示す 1 つの例です。

Spring Cloud Task は、特定のタスクのライフサイクルイベントを記録します。ほとんどの Web アプリケーションに代表される、長時間実行プロセスのほとんどは、ライフサイクルイベントを保存しません。Spring Cloud Task の中心となるタスクはこれを実行します。

ライフサイクルは単一のタスクの実行で構成されます。これは、タスクとして構成された Spring Boot アプリケーションの物理的な実行です (つまり、Sprint Cloud タスクの依存関係があります)。

タスクの開始時、CommandLineRunner または ApplicationRunner 実装が実行される前に、開始イベントを記録する TaskRepository 内のエントリが作成されます。このイベントは、Spring Framework によってトリガーされる SmartLifecycle#start によってトリガーされます。これは、すべての Bean が使用できる状態にあり、Spring Boot によって提供される CommandLineRunner または ApplicationRunner 実装を実行する前に行われることをシステムに示します。

タスクの記録は、ApplicationContext のブートストラップが成功した場合にのみ行われます。コンテキストがブートストラップにまったく失敗した場合、タスクの実行は記録されません。

Spring Boot からの *Runner#run 呼び出しがすべて完了するか、ApplicationContext が失敗する ( ApplicationFailedEvent によって示される) と、タスクの実行が結果とともにリポジトリ内で更新されます。

アプリケーションがタスクの完了時に ApplicationContext を閉じる必要がある場合 (すべての *Runner#run メソッドが呼び出され、タスクリポジトリが更新されている場合)、プロパティ spring.cloud.task.closecontextEnabled を true に設定します。

7.1. TaskExecution

TaskRepository に格納される情報は TaskExecution クラスでモデル化され、次の情報で構成されます。

フィールド 説明

executionid

タスクの実行の一意の ID。

exitCode

ExitCodeExceptionMapper 実装から生成された終了コード。終了コードは生成されないが、ApplicationFailedEvent がスローされた場合、1 が設定されます。それ以外の場合は、0 とみなされます。

taskName

構成された TaskNameResolver によって決定されるタスクの名前。

startTime

SmartLifecycle#start 呼び出しによって示される、タスクが開始された時刻。

endTime

ApplicationReadyEvent で示されるタスクの完了時刻。

exitMessage

退出時に入手可能な情報。これは、TaskExecutionListener によってプログラム的に設定できます。

errorMessage

例外がタスク終了の原因である場合 ( ApplicationFailedEvent によって示される)、その例外のスタックトレースがここに保存されます。

arguments

実行可能 Boot アプリケーションに渡された文字列コマンドライン引数の List

7.2. 終了コードのマッピング

タスクが完了すると、OS に終了コードを返そうとします。元の例を見ると、アプリケーションのその側面を制御していないことがわかります。例外がスローされた場合、JVM はデバッグに役立つかどうかわからないコードを返します。

そのため、Spring Boot は、キャッチされなかった例外を終了コードにマップできるインターフェース ExitCodeExceptionMapper を提供します。そうすることで、何が問題だったのかを終了コードのレベルで示すことができます。また、この方法で終了コードをマッピングすることにより、Spring Cloud Task は返された終了コードを記録します。

タスクが SIG-INT または SIG-TERM で終了する場合、コード内で特に指定されていない限り、終了コードは 0 です。

タスクの実行中、終了コードはリポジトリに null として保存されます。タスクが完了すると、このセクションで前述したガイドラインに基づいて、適切な終了コードが保存されます。

8. 構成

Spring Cloud Task は、DefaultTaskConfigurer クラスおよび SimpleTaskConfiguration クラスで定義されているように、すぐに使用できる構成を提供します。このセクションでは、デフォルト設定と、ニーズに合わせて Spring Cloud Task をカスタマイズする方法について説明します。

8.1. データソース

Spring Cloud Task は、タスクの実行結果を保存するためにデータソースを使用します。デフォルトでは、H2 のメモリ内インスタンスを提供して、ブートストラップ開発の簡単な方法を提供します。ただし、本番環境では、おそらく独自の DataSource を構成する必要があるでしょう。

アプリケーションが単一の DataSource のみを使用し、それがビジネススキーマとタスクリポジトリの両方として機能する場合、必要なのは DataSource を提供することだけです (これを行う最も簡単な方法は、Spring Boot の構成規則を使用することです)。この DataSource は、Spring Cloud Task によってリポジトリとして自動的に使用されます。

アプリケーションが複数の DataSource を使用する場合は、適切な DataSource を使用してタスクリポジトリを構成する必要があります。このカスタマイズは、TaskConfigurer の実装を通じて実行できます。

8.2. テーブルプレフィックス

TaskRepository の変更可能なプロパティの 1 つは、タスクテーブルのテーブルプレフィックスです。デフォルトでは、すべての先頭に TASK_ が付きます。TASK_EXECUTION と TASK_EXECUTION_PARAMS が 2 つの例です。ただし、このプレフィックスを変更する潜在的な理由があります。スキーマ名をテーブル名の先頭に追加する必要がある場合、または同じスキーマ内に複数のタスクテーブルのセットが必要な場合は、テーブルのプレフィックスを変更する必要があります。これを行うには、次のように spring.cloud.task.tablePrefix を必要なプレフィックスに設定します。

spring.cloud.task.tablePrefix=yourPrefix

spring.cloud.task.tablePrefix を使用することにより、ユーザーは、タスクテーブルスキーマの条件を満たし、かつユーザーのビジネスニーズに必要な変更を加えたタスクテーブルを作成する責任を負います。ここに示すように、独自のタスク DDL を作成するときのガイドとして Spring Cloud Task スキーマ DDL を利用できます。

8.3. テーブルの初期化を有効 / 無効にする

タスクテーブルを作成していて、タスクの開始時に Spring Cloud Task にタスクテーブルを作成させたくない場合は、次のように spring.cloud.task.initialize-enabled プロパティを false に設定します。

spring.cloud.task.initialize-enabled=false

デフォルトは true です。

プロパティ spring.cloud.task.initialize.enable は非推奨になりました。

8.4. 外部で生成されたタスク ID

場合によっては、タスクがリクエストされたときと、インフラストラクチャが実際にタスクを起動するときとの間の時間差を考慮したい場合があります。Spring Cloud Task を使用すると、タスクがリクエストされたときに TaskExecution を作成できます。次に、生成された TaskExecution の実行 ID をタスクに渡し、タスクのライフサイクルを通じて TaskExecution を更新できるようにします。

TaskExecution は、TaskExecution オブジェクトを保持するデータストアを参照する TaskRepository の実装で createTaskExecution メソッドを呼び出すことによって作成できます。

生成された TaskExecutionId を使用するようにタスクを構成するには、次のプロパティを追加します。

spring.cloud.task.executionid=yourtaskId

8.5. 外部タスク ID

Spring Cloud Task を使用すると、各 TaskExecution の外部タスク ID を保存できます。生成された TaskExecutionId を使用するようにタスクを構成するには、次のプロパティを追加します。

spring.cloud.task.external-execution-id=<externalTaskId>

8.6. 親タスク ID

Spring Cloud Task を使用すると、各 TaskExecution の親タスク ID を保存できます。この例としては、別のタスクを実行するタスクがあり、どのタスクが各子タスクを起動したかを記録したい場合があります。親 TaskExecutionId を設定するようにタスクを構成するには、子タスクに次のプロパティを追加します。

spring.cloud.task.parent-execution-id=<parentExecutionTaskId>

8.7. TaskConfigurer

TaskConfigurer は、Spring Cloud Task のコンポーネントの構成方法をカスタマイズできる戦略インターフェースです。デフォルトでは、論理デフォルトを提供する DefaultTaskConfigurer が提供されます。Map ベースのメモリ内コンポーネント (DataSource が提供されない場合に開発に役立ちます) および JDBC ベースのコンポーネント (DataSource が利用可能な場合に役立ちます)。

TaskConfigurer では、次の 3 つの主要コンポーネントを構成できます。

コンポーネント 説明 デフォルト (DefaultTaskConfigurer によって提供されました)

TaskRepository

使用する TaskRepository の実装。

SimpleTaskRepository

TaskExplorer

使用される TaskExplorer (タスクリポジトリへの読み取り専用アクセス用のコンポーネント) の実装。

SimpleTaskExplorer

PlatformTransactionManager

タスクの更新を実行するときに使用されるトランザクションマネージャー。

JdbcTransactionManager if a DataSource is used. ResourcelessTransactionManager if it is not.

You can customize any of the components described in the preceding table by creating a custom implementation of the TaskConfigurer interface. Typically, extending the DefaultTaskConfigurer (which is provided if a TaskConfigurer is not found) and overriding the required getter is sufficient. However, implementing your own from scratch may be required.

Users should not directly use getter methods from a TaskConfigurer directly unless they are using it to supply implementations to be exposed as Spring Beans.

8.8. Task Execution Listener

TaskExecutionListener lets you register listeners for specific events that occur during the task lifecycle. To do so, create a class that implements the TaskExecutionListener interface. The class that implements the TaskExecutionListener interface is notified of the following events:

  • onTaskStartup: Prior to storing the TaskExecution into the TaskRepository.

  • onTaskEnd: Prior to updating the TaskExecution entry in the TaskRepository and marking the final state of the task.

  • onTaskFailed: Prior to the onTaskEnd method being invoked when an unhandled exception is thrown by the task.

Spring Cloud Task also lets you add TaskExecution Listeners to methods within a bean by using the following method annotations:

  • @BeforeTask: Prior to the storing the TaskExecution into the TaskRepository

  • @AfterTask: タスクの最終状態をマークする TaskRepository 内の TaskExecution エントリを更新する前。

  • @FailedTask: 未処理の例外がタスクによってスローされたときに @AfterTask メソッドが呼び出される前。

次の例は、使用されている 3 つのアノテーションを示しています。

 public class MyBean {

    @BeforeTask
    public void methodA(TaskExecution taskExecution) {
    }

    @AfterTask
    public void methodB(TaskExecution taskExecution) {
    }

    @FailedTask
    public void methodC(TaskExecution taskExecution, Throwable throwable) {
    }
}
TaskLifecycleListener が存在する前に ApplicationListener を チェーンに挿入すると、予期しない影響が生じる可能性があります。

8.8.1. タスク実行リスナーによってスローされる例外

TaskExecutionListener イベントハンドラーによって例外がスローされた場合、そのイベントハンドラーのすべてのリスナー処理が停止します。例: 3 つの onTaskStartup リスナーが開始され、最初の onTaskStartup イベントハンドラーが例外をスローした場合、他の 2 つの onTaskStartup メソッドは呼び出されません。ただし、TaskExecutionListeners の他のイベントハンドラー (onTaskEnd および onTaskFailed) が呼び出されます。

TaskExecutionListener イベントハンドラーによって例外がスローされたときに返される終了コードは、ExitCodeEvent (Javadoc) によって報告された終了コードです。ExitCodeEvent が発行されない場合、スローされた例外が評価されて、型が ExitCodeGenerator であるかどうかが確認されます。存在する場合は、ExitCodeGenerator から終了コードを返します。それ以外の場合は、1 が返されます。

onTaskStartup メソッドで例外がスローされた場合、アプリケーションの終了コードは 1 になります。onTaskEnd または onTaskFailed メソッドで例外がスローされた場合、アプリケーションの終了コードは、上で列挙したルールを使用して確立されたコードになります。

onTaskStartuponTaskEnd、または onTaskFailed で例外がスローされた場合、ExitCodeExceptionMapper を使用してアプリケーションの終了コードをオーバーライドすることはできません。

8.8.2. 終了メッセージ

TaskExecutionListener を使用すると、タスクの終了メッセージをプログラムで設定できます。これは、TaskExecution’s exitMessage を設定することによって行われ、その後 TaskExecutionListener に渡されます。次の例は、@AfterTask ExecutionListener のアノテーションが付けられたメソッドを示しています。

@AfterTask
public void afterMe(TaskExecution taskExecution) {
    taskExecution.setExitMessage("AFTER EXIT MESSAGE");
}

ExitMessage は、リスナーイベント (onTaskStartuponTaskFailedonTaskEnd) のいずれかで設定できます。3 つのリスナーの優先順位は次のとおりです。

  1. onTaskEnd

  2. onTaskFailed

  3. onTaskStartup

例: onTaskStartup および onTaskFailed リスナーに exitMessage を設定し、タスクが失敗せずに終了した場合、onTaskStartup からの exitMessage がリポジトリに保存されます。それ以外の場合、障害が発生すると、onTaskFailed から exitMessage が格納されます。また、onTaskEnd リスナーを使用して exitMessage を設定した場合、onTaskEnd の exitMessage が、onTaskStartup と onTaskFailed の両方からの終了メッセージよりも優先されます。

8.9. Spring Cloud Task インスタンスの制限

Spring Cloud Task を使用すると、特定のタスク名を持つタスクを一度に 1 つだけ実行できるように設定できます。そのためには、タスク名を設定し、各タスク実行に対して spring.cloud.task.single-instance-enabled=true を設定する必要があります。最初のタスク実行の実行中に、同じタスク名と `spring.cloud.task.single-instance-enabled=true` を持つタスクを実行しようとすると、次のエラーメッセージが表示されてタスクが失敗します: Task with name "application" is already running.  spring.cloud.task.single-instance-enabled のデフォルト値は false です。次の例は、spring.cloud.task.single-instance-enabled を true に設定する方法を示しています。

spring.cloud.task.single-instance-enabled=true or false

この機能を使用するには、次の Spring Integration 依存関係をアプリケーションに追加する必要があります。

<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-core</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-jdbc</artifactId>
</dependency>
この機能が有効になっており、別のタスクが同じタスク名で実行されているためにタスクが失敗した場合、アプリケーションの終了コードは 1 になります。

8.9.1. Spring AOT およびネイティブコンパイルの単一インスタンスの使用

ネイティブコンパイルされたアプリの作成時に Spring Cloud Task の単一インスタンス機能を使用するには、ビルド時に機能を有効にする必要があります。これを行うには、次のように process-aot 実行を追加し、JVM 引数として spring.cloud.task.single-step-instance-enabled=true を設定します。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>process-aot</id>
            <goals>
                <goal>process-aot</goal>
            </goals>
            <configuration>
                <jvmArguments>
                    -Dspring.cloud.task.single-instance-enabled=true
                </jvmArguments>
            </configuration>
        </execution>
    </executions>
</plugin>

8.10. ApplicationRunner および CommandLineRunner の監視の有効化

ApplicationRunner または CommandLineRunner のタスク監視を有効にするには、spring.cloud.task.observation.enabled を true に設定します。

SimpleMeterRegistry を使用して観察を可能にするタスクアプリケーションの例は、ここにあります。

8.11. Spring Cloud Task 自動構成の無効化

Spring Cloud Task を実装用に自動構成すべきでない場合は、タスクの自動構成を無効にすることができます。これを行うには、次のアノテーションをタスクアプリケーションに追加します。

@EnableAutoConfiguration(exclude={SimpleTaskAutoConfiguration.class})

spring.cloud.task.autoconfiguration.enabled プロパティを false に設定して、タスクの自動構成を無効にすることもできます。

8.12. コンテキストを閉じる

アプリケーションがタスクの完了時に ApplicationContext を閉じる必要がある場合 (すべての *Runner#run メソッドが呼び出され、タスクリポジトリが更新されている場合)、プロパティ spring.cloud.task.closecontextEnabled を true に設定します。

コンテキストを閉じるもう 1 つのケースは、タスクの実行が完了してもアプリケーションが終了しない場合です。このような場合、スレッドが割り当てられているため、コンテキストは開いたままになります (たとえば、TaskExecutor を使用している場合)。このような場合は、タスクの起動時に spring.cloud.task.closecontextEnabled プロパティを true に設定します。これにより、タスクが完了するとアプリケーションのコンテキストが閉じられます。アプリケーションの終了が許可されます。

8.13. タスクメトリクスを有効にする

Spring Cloud Task は Micrometer と統合し、実行するタスクの監視を作成します。タスク監視の統合を有効にするには、spring-boot-starter-actuator、優先レジストリ実装 (メトリクスを公開する場合)、およびマイクロメータートレーシング (トレースデータを公開する場合) をタスクアプリケーションに追加する必要があります。Influx を使用してタスクの可観測性とメトリクスを有効にするための maven 依存関係セットの例は次のようになります。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-influx</artifactId>
    <scope>runtime</scope>
</dependency>

8.14. Spring タスクと Spring Cloud Task プロパティ

task という用語は業界で頻繁に使用される言葉です。このような例では、Spring Boot は spring.task を提供し、Spring Cloud Task は spring.cloud.task プロパティを提供します。このため、これら 2 つのプロパティグループが直接関連しているということで、過去に混乱が生じていました。ただし、これらは Spring エコシステムで提供される 2 つの異なる機能セットを表しています。

  • spring.task は、ThreadPoolTaskScheduler を構成するプロパティを指します。

  • spring.cloud.task は、Spring Cloud Task の機能を構成するプロパティを指します。

バッチ

このセクションでは、Spring Cloud Task と Spring Batch の統合について詳しく説明します。このセクションでは、ジョブの実行とそれが実行されたタスク間の関連付けの追跡、および Spring Cloud Deployer による リモートパーティショニングについて説明します。

9. ジョブ実行をそれが実行されたタスクに関連付ける

Spring Boot は、ü ber-jar 内でバッチジョブを実行するための機能を提供します。Spring Boot によるこの機能のサポートにより、開発者はその実行内で複数のバッチジョブを実行できます。Spring Cloud Task は、ジョブの実行 (ジョブ実行) をタスクの実行に関連付けて、一方を他方に追跡できるようにする機能を提供します。

Spring Cloud Task は、TaskBatchExecutionListener を使用してこの機能を実現します。デフォルトでは、このリスナーは、Spring Batch ジョブ (コンテキスト内で定義された型 Job の Bean を持つことによって) とクラスパス上の spring-cloud-task-batch jar の両方を持つコンテキストで自動的に設定されます。リスナーは、これらの条件を満たすすべてのジョブに挿入されます。

9.1. 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] (英語) にあります。

10. リモートパーティショニング

Spring Cloud Deployer は、ほとんどのクラウドインフラストラクチャ上で Spring Boot ベースのアプリケーションを起動するための機能を提供します。DeployerPartitionHandler および DeployerStepExecutionHandler は、ワーカーステップ実行の起動を Spring Cloud Deployer に委譲します。

DeployerStepExecutionHandler を構成するには、実行する Spring Boot ü ber-jar を表す ResourceTaskLauncherHandlerJobExplorer を指定する必要があります。任意の環境プロパティのほか、一度に実行する ワーカーの最大数、結果をポーリングする間隔 (デフォルトは 10 秒)、およびタイムアウト (デフォルトは -1 またはタイムアウトなし) を構成できます。次の例は、この PartitionHandler の構成がどのように見えるかを示しています。

@Bean
public PartitionHandler partitionHandler(TaskLauncher taskLauncher,
        JobExplorer jobExplorer) throws Exception {

    MavenProperties mavenProperties = new MavenProperties();
    mavenProperties.setRemoteRepositories(new HashMap<>(Collections.singletonMap("springRepo",
        new MavenProperties.RemoteRepository(repository))));

    Resource resource =
        MavenResource.parse(String.format("%s:%s:%s",
                "io.spring.cloud",
                "partitioned-batch-job",
                "1.1.0.RELEASE"), mavenProperties);

    DeployerPartitionHandler partitionHandler =
        new DeployerPartitionHandler(taskLauncher, jobExplorer, resource, "workerStep");

    List<String> commandLineArgs = new ArrayList<>(3);
    commandLineArgs.add("--spring.profiles.active=worker");
    commandLineArgs.add("--spring.cloud.task.initialize.enable=false");
    commandLineArgs.add("--spring.batch.initializer.enabled=false");

    partitionHandler.setCommandLineArgsProvider(
        new PassThroughCommandLineArgsProvider(commandLineArgs));
    partitionHandler.setEnvironmentVariablesProvider(new NoOpEnvironmentVariablesProvider());
    partitionHandler.setMaxWorkers(2);
    partitionHandler.setApplicationName("PartitionedBatchJobTask");

    return partitionHandler;
}
環境変数をパーティションに渡す場合、各パーティションは異なる環境設定を持つ異なるマシン上に存在する可能性があります。必要な環境変数のみを渡す必要があります。

上の例では、ワーカーの最大数を 2 に設定していることに注意してください。ワーカーの最大数を設定すると、一度に実行する必要があるパーティションの最大数が確立されます。

実行される Resource は、現在のコンテキストで CommandLineRunner として構成された DeployerStepExecutionHandler を備えた Spring Boot ü ber-jar であることが予想されます。前の例で列挙されたリポジトリは、ü ber-jar が配置されている リモートリポジトリである必要があります。マネージャーと ワーカーは両方とも、ジョブリポジトリおよびタスクリポジトリとして使用されている同じデータストアを認識できることが期待されます。基盤となるインフラストラクチャが Spring Boot jar をブートストラップし、Spring Boot が DeployerStepExecutionHandler を起動すると、ステップハンドラーはリクエストされた Step を実行します。次の例は、DeployerStepExecutionHandler を構成する方法を示しています。

@Bean
public DeployerStepExecutionHandler stepExecutionHandler(JobExplorer jobExplorer) {
    DeployerStepExecutionHandler handler =
        new DeployerStepExecutionHandler(this.context, jobExplorer, this.jobRepository);

    return handler;
}
リモートパーティションアプリケーションのサンプルは、Spring Cloud Task プロジェクトのサンプルモジュール ( こちら) [GitHub] (英語) にあります。

10.1. リモートバッチパーティションを非同期的に起動する

デフォルトでは、バッチパーティションは順番に起動されます。ただし、リソース (Kubernetes での pod のプロビジョニングなど) がプロビジョニングされるまで各起動がブロックされるため、場合によってはこれがパフォーマンスに影響を与える可能性があります。このような場合は、ThreadPoolTaskExecutor を DeployerPartitionHandler に提供できます。これにより、ThreadPoolTaskExecutor の構成に基づいて リモートバッチパーティションが起動されます。例:

    @Bean
    public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(4);
        executor.setThreadNamePrefix("default_task_executor_thread");
        executor.setWaitForTasksToCompleteOnShutdown(true);
        executor.initialize();
        return executor;
    }

    @Bean
    public PartitionHandler partitionHandler(TaskLauncher taskLauncher, JobExplorer jobExplorer,
        TaskRepository taskRepository, ThreadPoolTaskExecutor executor) throws Exception {
        Resource resource = this.resourceLoader
            .getResource("maven://io.spring.cloud:partitioned-batch-job:2.2.0.BUILD-SNAPSHOT");

        DeployerPartitionHandler partitionHandler =
            new DeployerPartitionHandler(taskLauncher, jobExplorer, resource,
                "workerStep", taskRepository, executor);
    ...
    }
ThreadPoolTaskExecutor を使用するとスレッドがアクティブなままになり、アプリが終了しないため、コンテキストを閉じる必要があります。アプリケーションを適切に閉じるには、spring.cloud.task.closecontextEnabled プロパティを true に設定する必要があります。

10.2. Kubernetes Platform 用のバッチパーティションアプリケーションの開発に関する注意事項

  • Kubernetes プラットフォームにパーティション分割されたアプリをデプロイする場合は、Spring Cloud Kubernetes Deployer に対して次の依存関係を使用する必要があります。

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-deployer-kubernetes</artifactId>
    </dependency>
  • タスクアプリケーションとそのパーティションのアプリケーション名は、正規表現パターン [a-z0-9]([-a-z0-9]*[a-z0-9]) に従う必要があります。それ以外の場合は、例外がスローされます。

11. バッチ情報メッセージ

Spring Cloud Task は、バッチジョブが情報メッセージを発行する機能を提供します。"Spring Batch イベント" セクションでは、この機能について詳しく説明します。

12. バッチジョブの終了コード

に説明したように、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 を作成する必要があります。

シングルステップのバッチジョブスターター

ここでは、Spring Cloud Task に含まれるスタータを使用して、Step 単体で Spring Batch Job を開発する方法について説明します。このスターターを使用すると、構成を使用して ItemReaderItemWriter、または完全なシングルステップ Spring Batch Job を定義できます。Spring Batch とその機能の詳細については、"Spring Batch ドキュメント" を参照してください。

Maven のスターターを入手するには、以下をビルドに追加します。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-single-step-batch-job</artifactId>
    <version>2.3.0</version>
</dependency>

Gradle のスターターを入手するには、以下をビルドに追加します。

compile "org.springframework.cloud:spring-cloud-starter-single-step-batch-job:2.3.0"

13. ジョブの定義

スターターを使用すると、ItemReader または ItemWriter だけを定義したり、完全な Job を定義したりできます。このセクションでは、Job を構成するためにどのプロパティを定義する必要があるかを定義します。

13.1. プロパティ

まず、スターターには、ジョブの基本を 1 つのステップで構成できる一連のプロパティが用意されています。

表 1: ジョブのプロパティ
プロパティ タイプ デフォルト値 説明

spring.batch.job.jobName

String

null

ジョブの名前。

spring.batch.job.stepName

String

null

ステップの名前。

spring.batch.job.chunkSize

Integer

null

トランザクションごとに処理されるアイテムの数。

上記のプロパティを構成すると、単一のチャンクベースのステップを持つジョブが作成されます。このチャンクベースのステップは、Map<String, Object> インスタンスを項目として読み取り、処理し、書き込みます。ただし、このステップではまだ何も行われません。何らかの処理を行うには、ItemReader、オプションの ItemProcessor、および ItemWriter を構成する必要があります。これらのいずれかを構成するには、プロパティを使用して自動構成を提供するオプションの 1 つを構成するか、標準の Spring 構成メカニズムを使用して独自のオプションを構成することができます。

独自に構成する場合は、入力型と出力型がステップ内の他の型と一致する必要があります。このスターターの ItemReader 実装と ItemWriter 実装はすべて、入力項目と出力項目として Map<String, Object> を使用します。

14. ItemReader 実装の自動構成

このスターターは、4 つの異なる ItemReader 実装 ( AmqpItemReaderFlatFileItemReaderJdbcCursorItemReaderKafkaItemReader) の自動構成を提供します。このセクションでは、提供された自動構成を使用してこれらのそれぞれを構成する方法の概要を説明します。

14.1. AmqpItemReader

AmqpItemReader を使用すると、AMQP でキューまたはトピックから読み取ることができます。この ItemReader 実装の自動構成は、2 つの構成セットに依存します。1 つ目は、AmqpTemplate の構成です。これを自分で設定することも、Spring Boot が提供する自動構成を使用することもできます。Spring Boot AMQP ドキュメント (英語) を参照してください。AmqpTemplate を構成したら、次のプロパティを設定することでバッチ機能を有効にしてそれをサポートできます。

表 2: AmqpItemReader プロパティ
プロパティ タイプ デフォルト値 説明

spring.batch.job.amqpitemreader.enabled

boolean

false

true の場合、自動構成が実行されます。

spring.batch.job.amqpitemreader.jsonConverterEnabled

boolean

true

メッセージを解析するために Jackson2JsonMessageConverter を登録する必要があるかどうかを示します。

詳しくは、AmqpItemReader ドキュメント (Javadoc) を参照してください。

14.2. FlatFileItemReader

FlatFileItemReader を使用すると、フラットファイル (CSV やその他のファイル形式など) から読み取ることができます。ファイルから読み取るには、通常の Spring 構成 (LineTokenizerRecordSeparatorPolicyFieldSetMapperLineMapper または SkippedLinesCallback) を通じていくつかのコンポーネントを自分で提供できます。次のプロパティを使用してリーダーを構成することもできます。

表 3: FlatFileItemReader プロパティ
プロパティ タイプ デフォルト値 説明

spring.batch.job.flatfileitemreader.saveState

boolean

true

再起動のために状態を保存するかどうかを決定します。

spring.batch.job.flatfileitemreader.name

String

null

ExecutionContext で一意のキーを提供するために使用される名前。

spring.batch.job.flatfileitemreader.maxItemcount

int

Integer.MAX_VALUE

ファイルから読み取られる項目の最大数。

spring.batch.job.flatfileitemreader.currentItemCount

int

0

すでに読まれたアイテムの数。再起動時に使用されます。

spring.batch.job.flatfileitemreader.comments

List<String>

空のリスト

ファイル内のコメント行 (無視される行) を示す文字列のリスト。

spring.batch.job.flatfileitemreader.resource

Resource

null

読み取られるリソース。

spring.batch.job.flatfileitemreader.strict

boolean

true

true に設定すると、リソースが見つからない場合、リーダーは例外をスローします。

spring.batch.job.flatfileitemreader.encoding

String

FlatFileItemReader.DEFAULT_CHARSET

ファイルを読み取るときに使用されるエンコーディング。

spring.batch.job.flatfileitemreader.linesToSkip

int

0

ファイルの先頭でスキップする行数を示します。

spring.batch.job.flatfileitemreader.delimited

boolean

false

ファイルが区切りファイル (CSV およびその他の形式) であるかどうかを示します。このプロパティまたは spring.batch.job.flatfileitemreader.fixedLength のうち 1 つだけが同時に true になることができます。

spring.batch.job.flatfileitemreader.delimiter

String

DelimitedLineTokenizer.DELIMITER_COMMA

区切り文字で区切られたファイルを読み取る場合、解析する区切り文字を示します。

spring.batch.job.flatfileitemreader.quoteCharacter

char

DelimitedLineTokenizer.DEFAULT_QUOTE_CHARACTER

値を引用符で囲むために使用される文字を決定するために使用されます。

spring.batch.job.flatfileitemreader.includedFields

List<Integer>

空のリスト

レコード内のどのフィールドをアイテムに含めるかを決定するインデックスのリスト。

spring.batch.job.flatfileitemreader.fixedLength

boolean

false

ファイルのレコードが列番号によって解析されるかどうかを示します。このプロパティまたは spring.batch.job.flatfileitemreader.delimited のうち 1 つだけが同時に true になることができます。

spring.batch.job.flatfileitemreader.ranges

List<Range>

空のリスト

固定幅レコードを解析するための列範囲のリスト。範囲に関するドキュメント (Javadoc) を参照してください。

spring.batch.job.flatfileitemreader.names

String []

null

レコードから解析された各フィールドの名前のリスト。これらの名前は、この ItemReader から返される項目の Map<String, Object> 内のキーです。

spring.batch.job.flatfileitemreader.parsingStrict

boolean

true

true に設定すると、フィールドをマップできない場合、マッピングは失敗します。

14.3. JdbcCursorItemReader

JdbcCursorItemReader は、リレーショナルデータベースに対してクエリを実行し、結果のカーソル (ResultSet) を反復処理して、結果の項目を提供します。この自動構成により、PreparedStatementSetterRowMapper、またはその両方を提供できます。次のプロパティを使用して JdbcCursorItemReader を構成することもできます。

表 4: JdbcCursorItemReader プロパティ
プロパティ タイプ デフォルト値 説明

spring.batch.job.jdbccursoritemreader.saveState

boolean

true

再起動のために状態を保存するかどうかを決定します。

spring.batch.job.jdbccursoritemreader.name

String

null

ExecutionContext で一意のキーを提供するために使用される名前。

spring.batch.job.jdbccursoritemreader.maxItemcount

int

Integer.MAX_VALUE

ファイルから読み取られる項目の最大数。

spring.batch.job.jdbccursoritemreader.currentItemCount

int

0

すでに読まれたアイテムの数。再起動時に使用されます。

spring.batch.job.jdbccursoritemreader.fetchSize

int

データベースシステムへの呼び出しごとに取得するレコードの数を示すドライバーへのヒント。最高のパフォーマンスを得るには、通常、チャンクサイズと一致するように設定する必要があります。

spring.batch.job.jdbccursoritemreader.maxRows

int

データベースから読み取るアイテムの最大数。

spring.batch.job.jdbccursoritemreader.queryTimeout

int

クエリがタイムアウトするまでのミリ秒数。

spring.batch.job.jdbccursoritemreader.ignoreWarnings

boolean

true

リーダーが処理時に SQL 警告を無視するかどうかを決定します。

spring.batch.job.jdbccursoritemreader.verifyCursorPosition

boolean

true

RowMapper がカーソルを進めなかったことを確認するために、各読み取り後にカーソルの位置を検証する必要があるかどうかを示します。

spring.batch.job.jdbccursoritemreader.driverSupportsAbsolute

boolean

false

ドライバーがカーソルの絶対位置をサポートするかどうかを示します。

spring.batch.job.jdbccursoritemreader.useSharedExtendedConnection

boolean

false

接続が他の処理と共有されているかどうか (つまり、トランザクションの一部であるか) を示します。

spring.batch.job.jdbccursoritemreader.sql

String

null

読み取り元の SQL クエリ。

次のプロパティを使用して、リーダー専用に JDBC DataSource を指定することもできます。JdbcCursorItemReader のプロパティ

プロパティ タイプ デフォルト値 説明

spring.batch.job.jdbccursoritemreader.datasource.enable

boolean

false

JdbcCursorItemReader DataSource を有効にするかどうかを決定します。

jdbccursoritemreader.datasource.url

String

null

データベースの JDBC URL。

jdbccursoritemreader.datasource.username

String

null

データベースのログインユーザー名。

jdbccursoritemreader.datasource.password

String

null

データベースのログインパスワード。

jdbccursoritemreader.datasource.driver-class-name

String

null

JDBC ドライバーの完全修飾名。

jdbccursoritemreader_datasource が指定されていない場合、デフォルトの DataSource が JDBCCursorItemReader によって使用されます。

14.4. KafkaItemReader

Kafka トピックからデータのパーティションを取り込むことは便利であり、まさに KafkaItemReader で実行できることです。KafkaItemReader を構成するには、2 つの構成が必要です。まず、Spring Boot の Kafka 自動構成を使用して Kafka を構成する必要があります ( "Spring Boot Kafka ドキュメント" を参照)。Spring Boot から Kafka プロパティを構成したら、次のプロパティを設定して KafkaItemReader 自体を構成できます。

表 5: KafkaItemReader プロパティ
プロパティ タイプ デフォルト値 説明

spring.batch.job.kafkaitemreader.name

String

null

ExecutionContext で一意のキーを提供するために使用される名前。

spring.batch.job.kafkaitemreader.topic

String

null

読み取り元のトピックの名前。

spring.batch.job.kafkaitemreader.partitions

List<Integer>

空のリスト

読み取り対象のパーティションインデックスのリスト。

spring.batch.job.kafkaitemreader.pollTimeOutInSeconds

long

30

poll() 操作のタイムアウト。

spring.batch.job.kafkaitemreader.saveState

boolean

true

再起動のために状態を保存するかどうかを決定します。

14.5. ネイティブコンパイル

シングルステップバッチ処理の利点は、JVM の使用時に実行時に使用するリーダー Bean とライター Bean を動的に選択できることです。ただし、ネイティブコンパイルを使用する場合は、実行時ではなくビルド時にリーダーとライターを決定する必要があります。次の例ではこれを実行します。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>process-aot</id>
            <goals>
                <goal>process-aot</goal>
            </goals>
            <configuration>
                <jvmArguments>
                    -Dspring.batch.job.flatfileitemreader.name=fooReader
                    -Dspring.batch.job.flatfileitemwriter.name=fooWriter
                </jvmArguments>
            </configuration>
        </execution>
    </executions>
</plugin>

15. ItemProcessor の設定

シングルステップのバッチジョブ自動構成は、ApplicationContext 内で ItemProcessor が使用可能な場合、それを受け入れます。正しい型 (ItemProcessor<Map<String, Object>, Map<String, Object>>) のものが見つかると、それがステップにオートワイヤーされます。

16. ItemWriter 実装の自動構成

このスターターは、サポートされている ItemReader 実装 ( AmqpItemWriterFlatFileItemWriterJdbcItemWriterKafkaItemWriter) と一致する ItemWriter 実装の自動構成を提供します。このセクションでは、自動構成を使用してサポートされている ItemWriter を構成する方法について説明します。

16.1. AmqpItemWriter

RabbitMQ キューに書き込むには、2 つの設定セットが必要です。まず、AmqpTemplate が必要です。これを取得する最も簡単な方法は、Spring Boot の RabbitMQ 自動構成を使用することです。Spring Boot AMQP ドキュメント (英語) を参照してください。

AmqpTemplate を構成したら、次のプロパティを設定して AmqpItemWriter を構成できます。

表 6: AmqpItemWriter プロパティ
プロパティ タイプ デフォルト値 説明

spring.batch.job.amqpitemwriter.enabled

boolean

false

true の場合、自動構成が実行されます。

spring.batch.job.amqpitemwriter.jsonConverterEnabled

boolean

true

メッセージを変換するために Jackson2JsonMessageConverter を登録する必要があるかどうかを示します。

16.2. FlatFileItemWriter

ステップの出力としてファイルを書き込むには、FlatFileItemWriter を構成します。自動構成は、明示的に構成されたコンポーネント ( LineAggregatorFieldExtractorFlatFileHeaderCallbackFlatFileFooterCallback など) と、指定された次のプロパティを設定することによって構成されたコンポーネントを受け入れます。

表 7: FlatFileItemWriter プロパティ
プロパティ タイプ デフォルト値 説明

spring.batch.job.flatfileitemwriter.resource

Resource

null

読み取られるリソース。

spring.batch.job.flatfileitemwriter.delimited

boolean

false

出力ファイルが区切りファイルかどうかを示します。true の場合、spring.batch.job.flatfileitemwriter.formatted は false でなければなりません。

spring.batch.job.flatfileitemwriter.formatted

boolean

false

出力ファイルがフォーマットされたファイルかどうかを示します。true の場合、spring.batch.job.flatfileitemwriter.delimited は false でなければなりません。

spring.batch.job.flatfileitemwriter.format

String

null

フォーマットされたファイルの出力を生成するために使用されるフォーマット。フォーマットは String.format を使用して実行されます。

spring.batch.job.flatfileitemwriter.locale

Locale

Locale.getDefault()

ファイルの生成時に使用される Locale

spring.batch.job.flatfileitemwriter.maximumLength

int

0

レコードの最大長。0 の場合、サイズは無制限です。

spring.batch.job.flatfileitemwriter.minimumLength

int

0

最小レコード長。

spring.batch.job.flatfileitemwriter.delimiter

String

,

String は、区切り文字付きファイル内のフィールドを区切るために使用されます。

spring.batch.job.flatfileitemwriter.encoding

String

FlatFileItemReader.DEFAULT_CHARSET

ファイルを書き込むときに使用するエンコーディング。

spring.batch.job.flatfileitemwriter.forceSync

boolean

false

ファイルをフラッシュ時にディスクに強制同期する必要があるかどうかを示します。

spring.batch.job.flatfileitemwriter.names

String []

null

レコードから解析された各フィールドの名前のリスト。これらの名前は、この ItemWriter によって受信される項目の Map<String, Object> 内のキーです。

spring.batch.job.flatfileitemwriter.append

boolean

false

出力ファイルが見つかった場合にファイルを追加するかどうかを示します。

spring.batch.job.flatfileitemwriter.lineSeparator

String

FlatFileItemWriter.DEFAULT_LINE_SEPARATOR

出力ファイルの行を区切るために使用する String

spring.batch.job.flatfileitemwriter.name

String

null

ExecutionContext で一意のキーを提供するために使用される名前。

spring.batch.job.flatfileitemwriter.saveState

boolean

true

再起動のために状態を保存するかどうかを決定します。

spring.batch.job.flatfileitemwriter.shouldDeleteIfEmpty

boolean

false

true に設定すると、ジョブの完了時に空のファイル (出力はありません) が削除されます。

spring.batch.job.flatfileitemwriter.shouldDeleteIfExists

boolean

true

true に設定されており、出力ファイルがあるべき場所でファイルが見つかった場合、そのファイルはステップが開始される前に削除されます。

spring.batch.job.flatfileitemwriter.transactional

boolean

FlatFileItemWriter.DEFAULT_TRANSACTIONAL

リーダーがトランザクションキューであるかどうかを示します (失敗時に読み取られた項目がキューに返されることを示します)。

16.3. JdbcBatchItemWriter

ステップの出力をリレーショナルデータベースに書き込むために、このスターターは JdbcBatchItemWriter を自動構成する機能を提供します。自動構成では、次のプロパティを設定することで、独自の ItemPreparedStatementSetter または ItemSqlParameterSourceProvider と構成オプションを提供できます。

表 8: JdbcBatchItemWriter プロパティ
プロパティ タイプ デフォルト値 説明

spring.batch.job.jdbcbatchitemwriter.name

String

null

ExecutionContext で一意のキーを提供するために使用される名前。

spring.batch.job.jdbcbatchitemwriter.sql

String

null

各項目の挿入に使用される SQL。

spring.batch.job.jdbcbatchitemwriter.assertUpdates

boolean

true

すべての挿入によって少なくとも 1 つのレコードが更新されることを検証するかどうか。

次のプロパティを使用して、ライター専用に JDBC DataSource を指定することもできます。JdbcBatchItemWriter のプロパティ

プロパティ タイプ デフォルト値 説明

spring.batch.job.jdbcbatchitemwriter.datasource.enable

boolean

false

JdbcCursorItemReader DataSource を有効にするかどうかを決定します。

jdbcbatchitemwriter.datasource.url

String

null

データベースの JDBC URL。

jdbcbatchitemwriter.datasource.username

String

null

データベースのログインユーザー名。

jdbcbatchitemwriter.datasource.password

String

null

データベースのログインパスワード。

jdbcbatchitemreader.datasource.driver-class-name

String

null

JDBC ドライバーの完全修飾名。

jdbcbatchitemwriter_datasource が指定されていない場合、デフォルトの DataSource が JdbcBatchItemWriter によって使用されます。

16.4. KafkaItemWriter

ステップ出力を Kafka トピックに書き込むには、KafkaItemWriter が必要です。このスターターは、2 つの場所の機能を使用して、KafkaItemWriter の自動構成を提供します。1 つ目は、Spring Boot の Kafka 自動構成です。(Spring Boot Kafka ドキュメントを参照してください) 次に、このスターターを使用すると、ライター上で 2 つのプロパティを構成できます。

表 9: KafkaItemWriter プロパティ
プロパティ タイプ デフォルト値 説明

spring.batch.job.kafkaitemwriter.topic

String

null

書き込む先の Kafka トピック。

spring.batch.job.kafkaitemwriter.delete

boolean

false

ライターに渡される項目をすべて削除イベントとしてトピックに送信するかどうか。

KafkaItemWriter の構成オプションの詳細については、"KafkaItemWiter ドキュメント (Javadoc) " を参照してください。

16.5. Spring AOT

シングルステップバッチスターターで Spring AOT を使用する場合は、コンパイル時にリーダーとライターの名前プロパティを設定する必要があります (リーダーまたはライター用の Bean を作成しない場合)。これを行うには、Boot maven プラグインまたは gradle プラグインの引数または環境変数として使用するリーダーおよびライターの名前を含める必要があります。たとえば、Maven で FlatFileItemReader と FlatFileItemWriter を有効にしたい場合は、次のようになります。

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <executions>
            <execution>
            <id>process-aot</id>
            <goals>
                <goal>process-aot</goal>
            </goals>
            </execution>
        </executions>
        <configuration>
            <arguments>
                <argument>--spring.batch.job.flatfileitemreader.name=foobar</argument>
                <argument>--spring.batch.job.flatfileitemwriter.name=fooWriter</argument>
            </arguments>
        </configuration>
    </plugin>

Spring Cloud Stream 統合

タスクはそれ自体でも便利ですが、タスクをより大きなエコシステムに統合すると、より複雑な処理やオーケストレーションに役立つようになります。このセクションでは、Spring Cloud Task と Spring Cloud Stream の統合オプションについて説明します。

17. Spring Cloud Stream からのタスクの起動

ストリームからタスクを起動できます。これを行うには、ペイロードとして TaskLaunchRequest を含むメッセージをリッスンするシンクを作成します。TaskLaunchRequest には次のものが含まれます。

  • uri: 実行されるタスクアーティファクトへ。

  • applicationName: タスクに関連付けられた名前。applicationName が設定されていない場合、TaskLaunchRequest は次の要素で構成されるタスク名を生成します。: Task-<UUID>.

  • commandLineArguments: タスクのコマンドライン引数を含むリスト。

  • environmentProperties: タスクで使用される環境変数を含むマップ。

  • deploymentProperties: デプロイヤーがタスクをデプロイするために使用するプロパティを含むマップ。

ペイロードの型が異なる場合、シンクは例外をスローします。

例: HTTP ソースからデータを取り込み、TaskLaunchRequest を含む GenericMessage を作成し、その出力チャネルにメッセージを送信するプロセッサーを備えたストリームを作成できます。タスクシンクは入力チャネルからメッセージを受信し、タスクを起動します。

taskSink を作成するには、次の例に示すように、EnableTaskLauncher アノテーションを含む Spring Boot アプリケーションを作成するだけです。

@SpringBootApplication
@EnableTaskLauncher
public class TaskSinkApplication {
    public static void main(String[] args) {
        SpringApplication.run(TaskSinkApplication.class, args);
    }
}

Spring Cloud Task プロジェクトのサンプルモジュール [GitHub] (英語) には、サンプルのシンクとプロセッサーが含まれています。これらのサンプルをローカル maven リポジトリにインストールするには、次の例に示すように、skipInstall プロパティを false に設定して spring-cloud-task-samples ディレクトリから maven ビルドを実行します。

mvn clean install

maven.remoteRepositories.springRepo.url プロパティは、ü ber-jar が配置されている リモートリポジトリの場所に設定する必要があります。設定されていない場合、リモートリポジトリは存在しないため、ローカルリポジトリのみに依存します。

17.1. Spring Cloud Data Flow

Spring Cloud Data Flow でストリームを作成するには、まず作成したタスクシンクアプリケーションを登録する必要があります。次の例では、Spring Cloud Data Flow シェルを使用してプロセッサーとシンクのサンプルアプリケーションを登録しています。

app register --name taskSink --type sink --uri maven://io.spring.cloud:tasksink:<version>
app register --name taskProcessor --type processor --uri maven:io.spring.cloud:taskprocessor:<version>

次の例は、Spring Cloud Data Flow シェルからストリームを作成する方法を示しています。

stream create foo --definition "http --server.port=9000|taskProcessor|taskSink" --deploy

18. Spring Cloud Task イベント

Spring Cloud Task は、タスクが Spring Cloud Stream チャネルを通じて実行されるときに、Spring Cloud Stream チャネルを通じてイベントを発行する機能を提供します。タスクリスナーは、task-events という名前のメッセージチャネルで TaskExecution をパブリッシュするために使用されます。この機能は、spring-cloud-streamspring-cloud-stream-<binder>、クラスパス上に定義されたタスクを持つタスクに自動接続されます。

イベント発行リスナーを無効にするには、spring.cloud.task.events.enabled プロパティを false に設定します。

適切なクラスパスが定義されていると、次のタスクは task-events チャネル上のイベントとして TaskExecution を発行します (タスクの開始時と終了時の両方で)。

@SpringBootApplication
public class TaskEventsApplication {

    public static void main(String[] args) {
        SpringApplication.run(TaskEventsApplication.class, args);
    }

    @Configuration
    public static class TaskConfiguration {

        @Bean
        public ApplicationRunner applicationRunner() {
            return new ApplicationRunner() {
                @Override
                public void run(ApplicationArguments args) {
                    System.out.println("The ApplicationRunner was executed");
                }
            };
        }
    }
}
バインダー実装もクラスパス上にある必要があります。
サンプルタスクイベントアプリケーションは、Spring Cloud Task プロジェクトのサンプルモジュール ( こちら) [GitHub] (英語) にあります。

18.1. 特定のタスクイベントの無効化

タスクイベントを無効にするには、spring.cloud.task.events.enabled プロパティを false に設定します。

19. Spring Batch イベント

タスクを通じて Spring Batch ジョブを実行する場合、Spring Batch で使用可能な Spring Batch リスナーに基づいて情報メッセージを発行するように Spring Cloud Task を構成できます。具体的には、次の Spring Batch リスナーが各バッチジョブに自動構成され、Spring Cloud Task を通じて実行されるときに、関連する Spring Cloud Stream チャネルにメッセージを送信します。

  • JobExecutionListener は job-execution-events をリッスンします

  • StepExecutionListener は step-execution-events をリッスンします

  • ChunkListener は chunk-events をリッスンします

  • ItemReadListener は item-read-events をリッスンします

  • ItemProcessListener は item-process-events をリッスンします

  • ItemWriteListener は item-write-events をリッスンします

  • SkipListener は skip-events をリッスンします

適切な Bean ( Job および TaskLifecycleListener) がコンテキスト内に存在する場合、これらのリスナーは AbstractJob に自動構成されます。これらのイベントをリッスンするための構成は、他の Spring Cloud Stream チャネルへのバインドと同じ方法で処理されます。私たちのタスク (バッチジョブを実行するタスク) は Source として機能し、リスニングアプリケーションは Processor または Sink として機能します。

たとえば、アプリケーションがジョブの開始と停止のために job-execution-events チャネルをリッスンすることが考えられます。リスニングアプリケーションを構成するには、次のように入力が job-execution-events になるように構成します。

spring.cloud.stream.bindings.input.destination=job-execution-events

バインダー実装もクラスパス上にある必要があります。
バッチイベントアプリケーションのサンプルは、Spring Cloud Task プロジェクトのサンプルモジュール ( こちら) [GitHub] (英語) にあります。

19.1. バッチイベントを別のチャネルに送信する

Spring Cloud Task がバッチイベントに対して提供するオプションの 1 つは、特定のリスナーがメッセージを送信できるチャネルを変更する機能です。これを行うには、次の構成を使用します: spring.cloud.stream.bindings.<the channel>.destination=<new destination>。例: StepExecutionListener がデフォルトの step-execution-events ではなく my-step-execution-events という別のチャネルにメッセージを送信する必要がある場合、次の構成を追加できます。

spring.cloud.task.batch.events.step-execution-events-binding-name=my-step-execution-events

19.2. バッチイベントの無効化

すべてのバッチイベントのリスナー機能を無効にするには、次の構成を使用します。

spring.cloud.task.batch.events.enabled=false

特定のバッチイベントを無効にするには、次の構成を使用します。

spring.cloud.task.batch.events.<batch event listener>.enabled=false:

次のリストは、無効にできる個々のリスナーを示しています。

spring.cloud.task.batch.events.job-execution.enabled=false
spring.cloud.task.batch.events.step-execution.enabled=false
spring.cloud.task.batch.events.chunk.enabled=false
spring.cloud.task.batch.events.item-read.enabled=false
spring.cloud.task.batch.events.item-process.enabled=false
spring.cloud.task.batch.events.item-write.enabled=false
spring.cloud.task.batch.events.skip.enabled=false

19.3. バッチイベントの発行順序

デフォルトでは、バッチイベントには Ordered.LOWEST_PRECEDENCE があります。この値を変更するには (たとえば、5 に)、次の構成を使用します。

spring.cloud.task.batch.events.job-execution-order=5
spring.cloud.task.batch.events.step-execution-order=5
spring.cloud.task.batch.events.chunk-order=5
spring.cloud.task.batch.events.item-read-order=5
spring.cloud.task.batch.events.item-process-order=5
spring.cloud.task.batch.events.item-write-order=5
spring.cloud.task.batch.events.skip-order=5

付録

20. タスクリポジトリスキーマ

この付録では、タスクリポジトリで使用されるデータベーススキーマの ERD を提供します。

task schema

20.1. テーブル情報

TASK_EXECUTION

タスクの実行情報を格納します。

列名 必須 タイプ フィールド長 ノート

TASK_EXECUTION_ID

TRUE

BIGINT

Spring Cloud Task フレームワークは、アプリの起動時に、TASK_SEQ から取得した次に使用可能な ID を確立します。または、レコードがタスクの外部で作成される場合は、レコードの作成時に値を入力する必要があります。

START_TIME

FALSE

DATETIME(6)

アプリ起動時の Spring Cloud Task フレームワークによって値が設定されます。

END_TIME

FALSE

DATETIME(6)

アプリ終了時の Spring Cloud Task フレームワークによって値が確立されます。

TASK_NAME

FALSE

VARCHAR

100

ユーザーが spring.application.name を使用して名前を確立しない限り、アプリ起動時の Spring Cloud Task フレームワークはこれを「アプリケーション」に設定します。

EXIT_CODE

FALSE

INTEGER

ここで説明するようにユーザーがオーバーライドしない限り、Spring Boot のデフォルトに従います。

EXIT_MESSAGE

FALSE

VARCHAR

2500

ここで説明したユーザー定義。

ERROR_MESSAGE

FALSE

VARCHAR

2500

アプリ終了時の Spring Cloud Task フレームワークによって値が確立されます。

LAST_UPDATED

TRUE

TIMESTAMP

アプリ起動時の Spring Cloud Task フレームワークによって値が設定されます。または、レコードがタスクの外部で作成される場合は、レコードの作成時に値を入力する必要があります。

EXTERNAL_EXECUTION_ID

FALSE

VARCHAR

250

spring.cloud.task.external-execution-id プロパティが設定されている場合、アプリの起動時に Spring Cloud Task フレームワークによってこれが指定された値に設定されます。詳細については、こちらを参照してください

PARENT_TASK_EXECUTION_ID

FALSE

BIGINT

spring.cloud.task.parent-execution-id プロパティが設定されている場合、アプリの起動時に Spring Cloud Task フレームワークによってこれが指定された値に設定されます。詳細については、こちらを参照してください

TASK_EXECUTION_PARAMS

タスクの実行に使用されるパラメーターを保存します

列名 必須 タイプ フィールド長

TASK_EXECUTION_ID

TRUE

BIGINT

TASK_PARAM

FALSE

VARCHAR

2500

TASK_TASK_BATCH

タスクの実行をバッチの実行にリンクするために使用されます。

列名 必須 タイプ フィールド長

TASK_EXECUTION_ID

TRUE

BIGINT

JOB_EXECUTION_ID

TRUE

BIGINT

TASK_LOCK

ここで説明する single-instance-enabled 機能に使用されます。

列名 必須 タイプ フィールド長 ノート

LOCK_KEY

TRUE

CHAR

36

このロックの UUID

REGION

TRUE

VARCHAR

100

ユーザーは、このフィールドを使用してロックのグループを確立できます。

CLIENT_ID

TRUE

CHAR

36

ロックするアプリの名前を含むタスク実行 ID。

CREATED_DATE

TRUE

DATETIME

エントリが作成された日付

各データベース型のテーブルを設定するための DDL は、ここにあります。

20.2. SQL Server

デフォルトでは、Spring Cloud Task は、TASK_EXECUTION テーブルの TASK_EXECUTION_ID を決定するためにシーケンステーブルを使用します。ただし、SQL Server の使用中に複数のタスクを同時に起動すると、TASK_SEQ テーブルでデッドロックが発生する可能性があります。解決策は、TASK_EXECUTION_SEQ テーブルを削除し、同じ名前を使用してシーケンスを作成することです。例:

DROP TABLE TASK_SEQ;

CREATE SEQUENCE [DBO].[TASK_SEQ] AS BIGINT
 START WITH 1
 INCREMENT BY 1;
START WITH を現在の実行 ID よりも高い値に設定します。

21. このドキュメントの作成

このプロジェクトでは、Maven を使用してこのドキュメントを生成します。自分で生成するには、コマンド $ mvn clean install -DskipTests -P docs を実行します。

22. 可観測性メタデータ

22.1. 可観測性 - メトリクス

以下に、このプロジェクトで宣言されたすべての指標のリストを示します。

22.1.1. タスクがアクティブです

タスクの実行に関して作成されるメトリクス。

指標名  spring.cloud.task (規約クラス org.springframework.cloud.task.listener.DefaultTaskExecutionObservationConvention で定義)。タイプ  timer.

指標名  spring.cloud.task.active (規約クラス org.springframework.cloud.task.listener.DefaultTaskExecutionObservationConvention で定義)。タイプ  long task timer.

観測の開始後に追加された KeyValues は、*.active メトリクスから欠落している可能性があります。
Micrometer は、ベースユニットに nanoseconds を内部的に使用します。ただし、各バックエンドが実際のベースユニットを決定します。(つまり、Prometheus は秒を使用します)

外側のクラス org.springframework.cloud.task.listener.TaskExecutionObservation の完全修飾名。

すべてのタグには、spring.cloud.task プレフィックスを付ける必要があります。
表 10: カーディナリティの低いキー

名前

説明

spring.cloud.task.cf.app.id (必須)

CF クラウドのアプリ ID。

spring.cloud.task.cf.app.name (必須)

CF クラウドのアプリ名。

spring.cloud.task.cf.app.version (必須)

CF クラウドのアプリ版。

spring.cloud.task.cf.instance.index (必須)

CF クラウドのインスタンスインデックス。

spring.cloud.task.cf.org.name (必須)

CF クラウドの組織名。

spring.cloud.task.cf.space.id (必須)

CF クラウドのスペース ID。

spring.cloud.task.cf.space.name (必須)

CF クラウドのスペース名。

spring.cloud.task.execution.id (必須)

タスク実行 ID。

spring.cloud.task.exit.code (必須)

タスクの終了コード。

spring.cloud.task.external.execution.id (必須)

タスクの外部実行 ID。

spring.cloud.task.name (必須)

タスク名の測定。

spring.cloud.task.parent.execution.id (必須)

タスクの親実行 ID。

spring.cloud.task.status (必須)

タスクのステータス。成功することもあれば失敗することもあります。

22.1.2. タスクランナーの観察

タスクランナーの実行時に作成されるオブザベーション。

指標名  spring.cloud.task.runner (規約クラス org.springframework.cloud.task.configuration.observation.DefaultTaskObservationConvention で定義)。タイプ  timer.

指標名  spring.cloud.task.runner.active (規約クラス org.springframework.cloud.task.configuration.observation.DefaultTaskObservationConvention で定義)。タイプ  long task timer.

観測の開始後に追加された KeyValues は、*.active メトリクスから欠落している可能性があります。
Micrometer は、ベースユニットに nanoseconds を内部的に使用します。ただし、各バックエンドが実際のベースユニットを決定します。(つまり、Prometheus は秒を使用します)

外側のクラス org.springframework.cloud.task.configuration.observation.TaskDocumentedObservation の完全修飾名。

すべてのタグには、spring.cloud.task プレフィックスを付ける必要があります。
表 11: カーディナリティの低いキー

名前

説明

spring.cloud.task.runner.bean-name (必須)

Spring Cloud Task によって実行された Bean の名前。

22.2. 可観測性 - スパン

以下に、このプロジェクトで宣言されたすべてのスパンのリストを示します。

22.2.1. タスクのアクティブなスパン

タスクの実行に関して作成されるメトリクス。

スパン名  spring.cloud.task (規約クラス org.springframework.cloud.task.listener.DefaultTaskExecutionObservationConvention で定義)。

外側のクラス org.springframework.cloud.task.listener.TaskExecutionObservation の完全修飾名。

すべてのタグには、spring.cloud.task プレフィックスを付ける必要があります。
表 12: タグキー

名前

説明

spring.cloud.task.cf.app.id (必須)

CF クラウドのアプリ ID。

spring.cloud.task.cf.app.name (必須)

CF クラウドのアプリ名。

spring.cloud.task.cf.app.version (必須)

CF クラウドのアプリ版。

spring.cloud.task.cf.instance.index (必須)

CF クラウドのインスタンスインデックス。

spring.cloud.task.cf.org.name (必須)

CF クラウドの組織名。

spring.cloud.task.cf.space.id (必須)

CF クラウドのスペース ID。

spring.cloud.task.cf.space.name (必須)

CF クラウドのスペース名。

spring.cloud.task.execution.id (必須)

タスク実行 ID。

spring.cloud.task.exit.code (必須)

タスクの終了コード。

spring.cloud.task.external.execution.id (必須)

タスクの外部実行 ID。

spring.cloud.task.name (必須)

タスク名の測定。

spring.cloud.task.parent.execution.id (必須)

タスクの親実行 ID。

spring.cloud.task.status (必須)

タスクのステータス。成功することもあれば失敗することもあります。

22.2.2. タスクランナーの観測期間

タスクランナーの実行時に作成されるオブザベーション。

スパン名  spring.cloud.task.runner (規約クラス org.springframework.cloud.task.configuration.observation.DefaultTaskObservationConvention で定義)。

外側のクラス org.springframework.cloud.task.configuration.observation.TaskDocumentedObservation の完全修飾名。

すべてのタグには、spring.cloud.task プレフィックスを付ける必要があります。
表 13: タグキー

名前

説明

spring.cloud.task.runner.bean-name (必須)

Spring Cloud Task によって実行された Bean の名前。