Java 配置

Spring 3 带来了使用 Java 而不是 XML 配置应用程序的能力。截至 Spring Batch 2.2.0 中,您可以使用相同的 Java 配置来配置批处理作业。 基于 Java 的配置有三个组件:@EnableBatchProcessingannotation 和 two builders。spring-doc.cadn.net.cn

@EnableBatchProcessingannotation 的工作方式与其他@Enable*annotations 中的 Spring 家族。在这种情况下,@EnableBatchProcessing提供 构建批处理作业。在此基本配置中,StepScopeJobScope是 created,此外还有许多 bean 可用于 autowired:spring-doc.cadn.net.cn

默认实现提供前面列表中提到的 bean,并且需要一个DataSource以及PlatformTransactionManager作为上下文中的 bean 提供。数据源和交易 manager 被JobRepositoryJobExplorer实例。默认情况下,名为dataSource以及名为transactionManager将被使用。您可以使用 的@EnableBatchProcessing注解。以下示例演示如何提供 自定义数据源和事务管理器:spring-doc.cadn.net.cn

@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 开始,配置基本 infrastrucutre bean 的另一种编程方式 通过DefaultBatchConfiguration类。此类提供相同的 bean 提供方@EnableBatchProcessing,并可用作配置批处理作业的基类。 以下代码片段是如何使用它的典型示例:spring-doc.cadn.net.cn

@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 来获取。以下示例 演示如何自定义字符编码,例如:spring-doc.cadn.net.cn

@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,但不能双向 同一时间。