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 注解。一旦您有一个用它注释的类,您就拥有了前面描述的所有配置。
|
从 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();
}
}
数据源和事务管理器将从应用程序上下文解析,并设置在作业存储库和作业资源管理器上。您可以通过覆盖所需的 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 的编程方式,但不能同时使用两种方式。
|