抢先一步
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
注解引入了新的属性来指定哪些组件和参数应该用于配置 Batch 基础设施 Bean。例如,您现在可以指定 Spring Batch 应该在作业存储库中配置哪个数据源和事务管理器。以下代码片段展示了这种新配置方式
@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
指的是应用程序上下文中用于配置作业存储库和作业浏览器的 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
的新配置类,作为使用 @EnableBatchProcessing
配置基础设施 Bean 的替代方法。此类提供具有默认配置的基础设施 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 来指定自定义参数。例如,以下示例展示了如何覆盖作业存储库和作业浏览器中使用的默认字符编码
@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
的新工厂 Bean,将相同的事务支持添加到 JobOperator
中。
此里程碑版本引入了以下弃用和 API 更改
JobBuilderFactory
和 StepBuilderFactory
现已弃用。您应该改用 JobBuilder
和 StepBuilder
。BatchConfigurer
和 DefaultBatchConfigurer
已移除。您不再应该使用此接口及其默认实现来自定义 @EnableBatchProcessing
的行为主要依赖项已升级到以下版本
我要感谢所有参与此版本发布的贡献者!在我们继续 Spring Batch 5 的工作时,我们期待您在 Github、Twitter 和 StackOverflow 上提供反馈。