Java 構成

Spring 3 は、XML の代わりに Java を使用してアプリケーションを構成する機能をもたらしました。Spring Batch 2.2.0 の時点で、同じ Java 構成を使用してバッチジョブを構成できます。Java ベースの構成には、@EnableBatchProcessing アノテーションと 2 つのビルダーの 3 つのコンポーネントがあります。

@EnableBatchProcessing アノテーションは、Spring ファミリーの他の @Enable* アノテーションと同様に機能します。この場合、@EnableBatchProcessing は、バッチジョブを構築するための基本構成を提供します。この基本構成内で、StepScope および JobScope のインスタンスが作成され、多数の Bean がオートワイヤーできるようになります。

  • JobRepositoryjobRepository という名前の Bean

  • JobLauncherjobLauncher という名前の Bean

  • JobRegistryjobRegistry という名前の Bean

  • JobExplorerjobExplorer という名前の Bean

  • JobOperatorjobOperator という名前の Bean

デフォルトの実装は、前のリストに記載されている Bean を提供し、DataSource および PlatformTransactionManager をコンテキスト内の Bean として提供する必要があります。データソースとトランザクションマネージャーは、JobRepository および JobExplorer インスタンスによって使用されます。デフォルトでは、dataSource という名前のデータソースと transactionManager という名前のトランザクションマネージャーが使用されます。@EnableBatchProcessing アノテーションの属性を使用して、これらの Bean をカスタマイズできます。次の例は、カスタムデータソースとトランザクションマネージャーを提供する方法を示しています。

@Configuration
@EnableBatchProcessing(dataSourceRef = "batchDataSource", transactionManagerRef = "batchTransactionManager")
public class MyJobConfiguration {

	@Bean
	public DataSource batchDataSource() {
		return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.HSQL)
				.addScript("/org/springframework/batch/core/schema-hsqldb.sql")
				.generateUniqueName(true).build();
	}

	@Bean
	public JdbcTransactionManager batchTransactionManager(DataSource dataSource) {
		return new JdbcTransactionManager(dataSource);
	}

	@Bean
	public Job job(JobRepository jobRepository) {
		return new JobBuilder("myJob", jobRepository)
				//define job flow as needed
				.build();
	}

}
@EnableBatchProcessing アノテーションが必要な構成クラスは 1 つだけです。クラスにアノテーションを付けると、前述のすべての構成が完了します。

v5.0 から始めて、ベースインフラストラクチャ Bean を構成する代替のプログラムによる方法が DefaultBatchConfiguration クラスを通じて提供されます。このクラスは、@EnableBatchProcessing によって提供されるものと同じ Bean を提供し、バッチジョブを構成するための基本クラスとして使用できます。次のスニペットは、その使用方法の典型的な例です。

@Configuration
class MyJobConfiguration extends DefaultBatchConfiguration {

	@Bean
	public Job job(JobRepository jobRepository) {
		return new JobBuilder("job", jobRepository)
				// define job flow as needed
				.build();
	}

}

データソースとトランザクションマネージャーは、アプリケーションコンテキストから解決され、ジョブリポジトリとジョブエクスプローラーに設定されます。必要な setter をオーバーライドすることにより、任意のインフラストラクチャ Bean の構成をカスタマイズできます。次の例は、たとえば文字エンコーディングをカスタマイズする方法を示しています。

@Configuration
class MyJobConfiguration extends DefaultBatchConfiguration {

	@Bean
	public Job job(JobRepository jobRepository) {
		return new JobBuilder("job", jobRepository)
				// define job flow as needed
				.build();
	}

	@Override
	protected Charset getCharset() {
		return StandardCharsets.ISO_8859_1;
	}
}
@EnableBatchProcessing は DefaultBatchConfiguration と一緒に使用しないでください。@EnableBatchProcessing を介して Spring Batch を構成する宣言的な方法を使用するか、DefaultBatchConfiguration を継承するプログラムによる方法を使用する必要がありますが、両方の方法を同時に使用することはできません。