バッチアプリケーション
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 を使用する場合、実際のデータベースを使用する必要があります。インメモリデータベースでもかまいません。ジョブリポジトリの構成を参照してください。