领先一步
VMware 提供培训和认证,助力你的进步。
了解更多我很高兴宣布 Spring Batch 5.0.0-M6 现在可从我们的里程碑仓库获取,4.3.7 可从 Maven Central 获取。版本 4.3.7 是一个补丁版本,可以作为 4.3.6 的直接替代品使用。你可以在这里找到其发布说明。这篇博客文章主要介绍新的里程碑版本 5.0.0-M6。在这个里程碑中,我们着重改进了 Spring Batch 的配置过程,使其更加灵活和简单。这篇博客文章将详细介绍框架在此领域的主要变化,并展示在此里程碑版本中引入的新特性。有关完整的变更列表,请参阅发布说明。
在此版本中,@EnableBatchProcessing 注解引入了新属性,用于指定应使用哪些组件和参数来配置批处理基础设施 Bean。例如,你现在可以指定 Spring Batch 在 Job Repository 中应该配置哪个数据源和事务管理器。以下片段展示了进行此类配置的新方式:
@Configuration
@EnableBatchProcessing(dataSourceRef = "batchDataSource", transactionManagerRef = "batchTransactionManager")
public class MyJobConfiguration {
@Bean
public Job job(JobRepository jobRepository) {
return new JobBuilder("myJob", jobRepository)
//define job flow as needed
.build();
}
}
在此示例中,batchDataSource 和 batchTransactionManager 指的是应用程序上下文中用于配置 Job Repository 和 Job Explorer 的 Bean。你不再需要定义自定义的 BatchConfiguer,此版本中已将其移除。例如,在 Spring Batch v4 中,可以通过提供自定义的 BatchConfigurer 来提供自定义的执行上下文序列化器,如下所示:
@Configuration
@EnableBatchProcessing
public class MyJobConfigWithCustomSerializer {
@Bean
public BatchConfigurer batchConfigurer() {
return new DefaultBatchConfigurer() {
@Override
public JobRepository getJobRepository() {
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setSerializer(createCustomSerializer());
// set other properties on the factory bean
try {
factory.afterPropertiesSet();
return factory.getObject();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public JobExplorer getJobExplorer() {
JobExplorerFactoryBean factoryBean = new JobExplorerFactoryBean();
factoryBean.setSerializer(createCustomSerializer());
// set other properties on the factory bean
try {
factoryBean.afterPropertiesSet();
return factoryBean.getObject();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private ExecutionContextSerializer createCustomSerializer() {
Jackson2ExecutionContextStringSerializer serializer = new Jackson2ExecutionContextStringSerializer();
// customize serializer
return serializer;
}
};
}
}
在 Spring Batch v5 中,你可以按如下方式提供自定义序列化器:
@Configuration
@EnableBatchProcessing(executionContextSerializerRef = "myCustomSerializer")
public class MyJobConfigWithCustomSerializer {
@Bean
public Job job(JobRepository jobRepository) {
return new JobBuilder("myJob", jobRepository)
//define job flow as needed
.build();
}
@Bean
public ExecutionContextSerializer myCustomSerializer() {
Jackson2ExecutionContextStringSerializer serializer = new Jackson2ExecutionContextStringSerializer();
// customize serializer
return serializer;
}
}
我们认为这种新的 Spring Batch 配置方式更直观、更简单、更不容易出错。
在此版本中,你可以使用一个名为 DefaultBatchConfiguration 的新配置类,作为配置基础设施 Bean 的另一种方式,替代使用 @EnableBatchProcessing。此类为基础设施 Bean 提供了默认配置,你可以根据需要进行自定义。以下片段展示了该类的典型用法:
@Configuration
class MyJobConfiguration extends DefaultBatchConfiguration {
@Bean
public Job job(JobRepository jobRepository) {
return new JobBuilder("myJob", jobRepository)
//define job flow as needed
.build();
}
}
在此示例中,注入到 Job Bean 定义中的 JobRepository Bean 在 DefaultBatchConfiguration 类中定义。你可以通过覆盖相应的 getter 来指定自定义参数。例如,以下示例展示了如何覆盖 Job Repository 和 Job Explorer 中使用的默认字符编码:
@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;
}
}
此版本通过 JobExplorerFactoryBean 创建的 JobExplorer 中引入了事务支持。现在,你可以指定在查询批处理元数据时使用哪个事务管理器来驱动只读事务。此外,你现在可以自定义事务属性。通过一个名为 JobOperatorFactoryBean 的新 Factory Bean,同样的事务支持也添加到了 JobOperator 中。
此里程碑版本引入了以下弃用和 API 变更:
JobBuilderFactory 和 StepBuilderFactory 现已弃用。你应该改用 JobBuilder 和 StepBuilder。BatchConfigurer 和 DefaultBatchConfigurer 已被移除。你不应再使用此接口及其默认实现来定制 @EnableBatchProcessing 的行为。主要依赖已升级到以下版本:
我要感谢所有为此版本做出贡献的人!在我们继续开发 Spring Batch 5 的过程中,期待你们在 Github、Twitter 和 StackOverflow 上提供反馈。