|
对于最新稳定版本,请使用 Spring Batch 文档 6.0.3! |
Java 配置
Spring 3 引入了使用 Java 而非 XML 配置应用程序的能力。自 Spring Batch 2.2.0 起,您可以使用相同的 Java 配置来配置批处理作业。基于 Java 的配置包含三个组件:@EnableBatchProcessing 注解和两个构建器。
@EnableBatchProcessing 注解的工作方式与 Spring 家族中的其他 @Enable* 注解类似。在这种情况下,@EnableBatchProcessing 为构建批处理作业提供了基础配置。在此基础配置中,除了创建大量可供自动装配的 Bean 之外,还会创建 StepScope 和 JobScope 的实例:
-
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 注解。一旦你有一个类被该注解标记,你就拥有了前面描述的所有配置。 |
从 v5.0 开始,提供了一种替代的、以编程方式配置基础架构 Bean 的方法,该方法通过 DefaultBatchConfiguration 类提供。此类提供了与 @EnableBatchProcessing 相同的 Bean,并可用作配置批处理作业的基类。以下代码片段展示了如何使用它的典型示例:
@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,但不可同时使用这两种方式。 |