Java 配置
Spring 3 带来了使用 Java 而不是 XML 配置应用程序的能力。截至
Spring Batch 2.2.0,您可以使用相同的 Java 配置来配置批处理作业。
基于 Java 的配置有三个组件:@EnableBatchProcessing注释和两个构建器。
这@EnableBatchProcessing注释的工作原理与其他注释类似@Enable*注释中的
Spring家族。在这种情况下,@EnableBatchProcessing提供基本配置
构建批处理作业。在此基本配置中,一个StepScope和JobScope是
创建,此外还有许多可供自动连接的 bean:
- 
JobRepository:名为jobRepository
- 
JobLauncher:名为jobLauncher
- 
JobRegistry:名为jobRegistry
- 
JobExplorer:名为jobExplorer
- 
JobOperator:名为jobOperator
默认实现提供前面列表中提到的 bean,并且需要DataSource和PlatformTransactionManager在上下文中作为 bean 提供。数据源和事务
管理器由JobRepository和JobExplorer实例。默认情况下,名为dataSource以及名为transactionManager将被使用。您可以使用以下命令自定义其中任何一个 bean
的属性@EnableBatchProcessing注解。以下示例演示了如何提供
自定义数据源和事务管理器:
@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 开始,这是一种配置基础基础设施 Bean 的替代编程方式
通过DefaultBatchConfiguration类。此类提供相同的 bean
提供方@EnableBatchProcessing并可用作基类来配置批处理作业。
以下代码段是如何使用它的典型示例:
@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.你应该
要么使用声明式方式配置 Spring Batch@EnableBatchProcessing,
或使用编程方式扩展DefaultBatchConfiguration,但不能同时在
同时。 |