バッチアプリケーション

Spring Boot アプリケーション内から Spring Batch を使用する場合、多くの質問がしばしば発生します。このセクションでは、これらの質問に対処します。

バッチデータソースの指定

デフォルトでは、バッチアプリケーションはジョブの詳細を保存するために DataSource を必要とします。Spring Batch は、デフォルトで単一の DataSource を想定しています。アプリケーションのメイン DataSource 以外の DataSource を使用するには、DataSource Bean を宣言し、その @Bean メソッドに @BatchDataSource のアノテーションを付けます。2 つのデータソースが必要な場合は、もう 1 つの @Primary をマークすることを忘れないでください。より細かく制御するには、@Configuration クラスの 1 つに @EnableBatchProcessing を追加するか、DefaultBatchConfiguration を継承します。詳細については、@EnableBatchProcessing (Javadoc) および DefaultBatchConfiguration (Javadoc) の Javadoc を参照してください。

Spring Batch の詳細については、Spring Batch プロジェクトページを参照してください。

バッチトランザクションマネージャーの指定

バッチデータソースの指定と同様に、バッチ処理で使用するために PlatformTransactionManager を定義するには、@BatchTransactionManager としてマークします。そのようにして 2 つのトランザクションマネージャーが必要な場合は、もう 1 つを @Primary としてマークすることを忘れないでください。

起動時に Spring Batch ジョブを実行する

Spring Batch 自動構成は、アプリケーションのクラスパスに spring-boot-starter-batch を追加することで有効になります。

アプリケーションコンテキストで単一の Job Bean が見つかった場合、起動時に実行されます (詳細については、JobLauncherApplicationRunner (Javadoc) を参照)。複数の Job Bean が見つかった場合は、spring.batch.job.name を使用して実行するジョブを指定する必要があります。

アプリケーションコンテキストで見つかった Job の実行を無効にするには、spring.batch.job.enabled を false に設定します。

詳細については、BatchAutoConfiguration [GitHub] (英語) を参照してください。

コマンドラインからの実行

Spring Boot は、-- で始まるコマンドライン引数をプロパティに変換して Environment に追加します。コマンドラインプロパティへのアクセスを参照してください。これは、バッチジョブに引数を渡すために使用しないでください。コマンドラインでバッチ引数を指定するには、次の例に示すように、通常の形式(つまり、-- なし)を使用します。

$ java -jar myapp.jar someParameter=someValue anotherParameter=anotherValue

コマンドラインで Environment のプロパティを指定すると、ジョブによって無視されます。次のコマンドを検討してください。

$ java -jar myapp.jar --server.port=7070 someParameter=someValue

これは、バッチジョブに 1 つの引数 someParameter=someValue のみを提供します。

停止または失敗したジョブの再開

障害が発生した Job を再起動するには、すべてのパラメーター (識別用および非識別用) をコマンドラインで再指定する必要があります。識別できないパラメーターは、前回の実行からコピーされません。これにより、変更または削除できるようになります。

カスタム JobParametersIncrementer を使用している場合、失敗した実行を再開するには、インクリメンタによって管理されているすべてのパラメーターを収集する必要があります。

ジョブリポジトリの保存

Spring Batch では、Job リポジトリ用のデータストアが必要です。Spring Boot を使用する場合、実際のデータベースを使用する必要があります。インメモリデータベースでもかまいません。ジョブリポジトリの構成を参照してください。