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,並且要求在上下文中提供一個 DataSource 和一個 PlatformTransactionManager 作為 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;
	}
}
不應將 @EnableBatchProcessingDefaultBatchConfiguration 一起使用。您應該要麼透過 @EnableBatchProcessing 使用宣告式方式配置 Spring Batch,要麼透過繼承 DefaultBatchConfiguration 使用程式設計方式,但不要同時使用這兩種方式。