Spring Batchを使用すると、ジョブやステップの実行状況を管理するために、いくつかのメタデータ用のテーブルが自動生成されます。これらのテーブルは、Spring Batchがジョブの状態を追跡し、再実行やエラー処理を可能にするために使用されます。
以下に、Spring Batchが自動生成するテーブルとその役割を説明します。
1. 自動生成されるテーブル一覧
Spring Batchがデフォルトで生成するテーブルは以下の通りです。
2. 各テーブルの詳細
2.1 BATCH_JOB_INSTANCE
役割: ジョブインスタンス(ジョブの実行単位)を管理します。
主なカラム:
JOB_INSTANCE_ID: ジョブインスタンスの一意なID。
JOB_NAME: ジョブの名前。
JOB_KEY: ジョブインスタンスを一意に識別するためのキー。
2.2 BATCH_JOB_EXECUTION
役割: ジョブの実行履歴を管理します。
主なカラム:
JOB_EXECUTION_ID: ジョブ実行の一意なID。
JOB_INSTANCE_ID: 対応するジョブインスタンスのID。
START_TIME: ジョブの開始時刻。
END_TIME: ジョブの終了時刻。
STATUS: ジョブの実行ステータス(例: COMPLETED, FAILED)。
EXIT_CODE: ジョブの終了コード。
EXIT_MESSAGE: ジョブの終了メッセージ。
2.3 BATCH_JOB_EXECUTION_PARAMS
役割: ジョブ実行時に渡されたパラメータを管理します。
主なカラム:
JOB_EXECUTION_ID: 対応するジョブ実行のID。
KEY_NAME: パラメータのキー。
TYPE_CD: パラメータの型(例: STRING, LONG)。
STRING_VAL: パラメータの値(文字列の場合)。
2.4 BATCH_JOB_EXECUTION_CONTEXT
役割: ジョブ実行時のコンテキスト情報を管理します。
主なカラム:
JOB_EXECUTION_ID: 対応するジョブ実行のID。
SERIALIZED_CONTEXT: コンテキスト情報をシリアライズしたデータ。
2.5 BATCH_STEP_EXECUTION
役割: ステップの実行履歴を管理します。
主なカラム:
STEP_EXECUTION_ID: ステップ実行の一意なID。
JOB_EXECUTION_ID: 対応するジョブ実行のID。
STEP_NAME: ステップの名前。
START_TIME: ステップの開始時刻。
END_TIME: ステップの終了時刻。
STATUS: ステップの実行ステータス(例: COMPLETED, FAILED)。
READ_COUNT: 読み取ったアイテムの数。
WRITE_COUNT: 書き込んだアイテムの数。
EXIT_CODE: ステップの終了コード。
EXIT_MESSAGE: ステップの終了メッセージ。
2.6 BATCH_STEP_EXECUTION_CONTEXT
役割: ステップ実行時のコンテキスト情報を管理します。
主なカラム:
STEP_EXECUTION_ID: 対応するステップ実行のID。
SERIALIZED_CONTEXT: コンテキスト情報をシリアライズしたデータ。
2.7 BATCH_STEP_EXECUTION_SEQ
役割: ステップ実行のシーケンス番号を管理します。
主なカラム:
ID: ステップ実行のシーケンス番号。
2.8 BATCH_JOB_EXECUTION_SEQ
役割: ジョブ実行のシーケンス番号を管理します。
主なカラム:
ID: ジョブ実行のシーケンス番号。
2.9 BATCH_JOB_SEQ
役割: ジョブインスタンスのシーケンス番号を管理します。
主なカラム:
ID: ジョブインスタンスのシーケンス番号。
3. テーブルの自動生成について
Spring Batchは、デフォルトでこれらのテーブルを自動生成します。ただし、以下の条件が必要です。
データベース接続の設定:
application.propertiesまたはapplication.ymlでデータベース接続を設定する必要があります。
spring.datasource.url=jdbc:mysql://localhost:3306/spring_batch_db
spring.datasource.username=root
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.batch.initialize-schema=always
spring.batch.initialize-schema=alwaysを設定すると、アプリケーション起動時にテーブルが自動生成されます。
デフォルトのスキーマ:
Spring Batchは、デフォルトでorg/springframework/batch/core/schema-*.sqlに定義されたスキーマを使用してテーブルを生成します。
データベースに応じたスキーマ(例: MySQL、PostgreSQL、H2など)が用意されています。
4. カスタマイズ方法
Spring Batchのデフォルトのテーブル名やスキーマをカスタマイズすることも可能です。
4.1 テーブル名の変更
BatchConfigurerを実装して、カスタムテーブル名を指定できます。
4.2 スキーマファイルの変更
独自のスキーマファイルを作成し、Spring Batchに読み込ませることができます。
5. まとめ
Spring Batchが自動生成するテーブルは、ジョブやステップの実行状況を管理するために重要な役割を果たします。これらのテーブルを使用することで、以下のような機能が実現できます。
- ジョブの実行履歴の追跡
- ジョブやステップの再実行
- エラー発生時のリカバリ
- 実行状況の監視
デフォルトの設定を使用するだけで、これらのテーブルが自動生成されるため、開発者はバッチ処理のロジックに集中できます。また、必要に応じてテーブル名やスキーマをカスタマイズすることも可能です。