Java 配置

Spring 3 带来了使用 Java 而不是 XML 配置应用程序的能力。从 Spring Batch 2.2.0 开始,您可以使用相同的 Java 配置来配置批处理作业。基于 Java 的配置包含三个组件:`@EnableBatchProcessing` 注解和两个构建器。

`@EnableBatchProcessing` 注解的工作方式类似于 Spring 家族中的其他 `@Enable*` 注解。在这种情况下,`@EnableBatchProcessing` 提供了构建批处理作业的基础配置。在此基础配置中,会创建 `StepScope` 和 `JobScope` 的实例,此外还会提供许多可自动装配的 Bean。

  • JobRepository:名为 jobRepository 的 Bean

  • JobLauncher:名为 jobLauncher 的 Bean

  • JobRegistry:名为 jobRegistry 的 Bean

  • JobExplorer:名为 jobExplorer 的 Bean

  • JobOperator:名为 jobOperator 的 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` 注解。一旦您有一个用它注释的类,您就拥有了前面描述的所有配置。

从 5.0 版开始,通过 `DefaultBatchConfiguration` 类提供了一种替代的、编程的方式来配置基础结构 Bean。此类提供与 `@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`,但不能同时使用这两种方式。