Java 配置

Spring 3 帶來了使用 Java 而非 XML 配置應用程式的能力。從 Spring Batch 2.2.0 開始,您可以使用相同的 Java 配置來配置批次 Job。基於 Java 的配置有三個組件:@EnableBatchProcessing 註解和兩個建構器。

@EnableBatchProcessing 註解的工作方式與 Spring 系列中的其他 @Enable* 註解類似。在本例中,@EnableBatchProcessing 為建構批次 Job 提供基礎配置。在此基礎配置中,除了許多可自動裝配的 bean 之外,還會建立 StepScopeJobScope 的實例。

  • JobRepository:名為 jobRepository 的 bean

  • JobLauncher:名為 jobLauncher 的 bean

  • JobRegistry:名為 jobRegistry 的 bean

  • JobExplorer:名為 jobExplorer 的 bean

  • JobOperator:名為 jobOperator 的 bean

預設實作提供了前面列表中提到的 bean,並且需要將 DataSourcePlatformTransactionManager 作為 bean 在上下文中提供。資料來源和交易管理器由 JobRepositoryJobExplorer 實例使用。預設情況下,將使用名為 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 註解。一旦您有一個類別使用它進行註解,您就擁有了前面描述的所有配置。

從 v5.0 開始,通過 DefaultBatchConfiguration 類別提供了一種替代的、程式化的方式來配置基礎架構 bean。此類別提供了與 @EnableBatchProcessing 相同的 bean,並且可以用作配置批次 Job 的基底類別。以下程式碼片段是如何使用它的典型範例

@Configuration
class MyJobConfiguration extends DefaultBatchConfiguration {

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

}

資料來源和交易管理器將從應用程式上下文中解析,並設定在 job repository 和 job explorer 上。您可以通過覆寫所需的 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,但不要同時使用這兩種方式。