跳到主要内容

Java 配置

QWen Plus 中英对照 Java Configuration

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

@EnableBatchProcessing 注解的工作方式类似于 Spring 系列中的其他 @Enable* 注解。在这种情况下,@EnableBatchProcessing 提供了构建批处理任务的基础配置。在该基础配置中,会创建 StepScopeJobScope 的实例,同时还会有一些 Bean 可以被自动注入。

  • 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();
}

}
java
备注

只需要一个配置类具有 @EnableBatchProcessing 注解。一旦你有一个类被该注解标记,你将拥有前面描述的所有配置。

从 v5.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();
}

}
java

数据源和事务管理器将从应用程序上下文中解析,并设置在作业存储库和作业浏览器上。您可以通过覆盖所需的 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;
}
}
java
备注

@EnableBatchProcessing 不应DefaultBatchConfiguration 一起使用。你应该要么使用通过 @EnableBatchProcessing 声明式配置 Spring Batch 的方式,要么使用扩展 DefaultBatchConfiguration 的编程方式,但不能同时使用这两种方式。