领先一步
VMware 提供培训和认证,助力您的进步。
了解更多我谨代表 Spring Batch 团队宣布,Spring Batch 4.3.0-M1 现在已可从我们的里程碑仓库获取。
此版本包含了许多新特性、性能改进和错误修复,以及文档和依赖项更新!您可以在发布说明中找到完整的更改列表,但以下是主要的亮点
ItemStreamWriter
类似于 SynchronizedItemStreamReader
,我们添加了 SynchronizedItemStreamWriter
。此功能对于多线程步骤非常有用,其中并发线程需要同步以避免相互覆盖写入。
JpaPagingItemReader
中添加对命名查询的支持到目前为止,可以在 JpaPagingItemReader
中使用命名查询。但是,这需要创建一个自定义查询提供程序,如下所示
JpaPagingItemReader<Foo> reader = new JpaPagingItemReaderBuilder<Foo>()
.name("fooReader")
.queryProvider(new AbstractJpaQueryProvider() {
@Override
public Query createQuery() {
return getEntityManager().createNamedQuery("allFoos", Foo.class);
}
@Override
public void afterPropertiesSet() throws Exception {
}
})
// set other properties on the reader
.build();
在此版本中,我们在 JpaNativeQueryProvider
旁边引入了 JpaNamedQueryProvider
以简化配置,现在可以这样编写
JpaPagingItemReader<Foo> reader = new JpaPagingItemReaderBuilder<Foo>()
.name("fooReader")
.queryProvider(new JpaNamedQueryProvider("allFoos", Foo.class))
// set other properties on the reader
.build();
类似于许多 Spring Boot 测试注解元注解了 @ExtendWith(SpringExtension.class)
(例如 @SpringBootTest
、@WebMvcTest
等),我们更新了 `@SpringBatchTest` 以元注解 @ExtendWith(SpringExtension.class)
。这简化了使用 JUnit Jupiter 编写测试时的配置。
请注意,此功能不影响 JUnit 4 用户,仅涉及基于 JUnit 5 的测试。
沿着我们在4.2 版本中引入的性能改进思路,我们在此版本中也继续改进了框架的几个部分。
RepositoryItemWriter
中使用批量写入在 4.2 版本之前,需要指定用于将项保存到数据库的方法名称。然后,此方法将在 for
循环中被调用以保存所有项。为了使用 CrudRepository#saveAll
,需要扩展 RepositoryItemWriter
并覆盖 write(List)
,这很不方便。
在此版本中,我们默认让 RepositoryItemWriter
使用 CrudRepository#saveAll
。根据我们的基准测试repository-item-writer-benchmark,此更改将写入器的性能提高了 **2 倍**
MongoItemWriter
中使用批量写入到目前为止,MongoItemWriter
在 for
循环中使用 MongoOperations#save()
将项保存到数据库。在此版本中,我们将此机制替换为单个 BulkOperations
调用。根据我们的基准测试mongo-item-writer-benchmark,此更改使 MongotItemWriter
比以前的版本快 25 倍
当启动一个新作业(或重启一个失败的作业)时,Spring Batch 会进行一系列检查以验证一些条件
所有这些检查都涉及到调用 JobRepository.getStepExecutionCount
来计算步骤执行次数。在 v4.2 之前,此方法的实现会加载所有作业执行和步骤执行,在框架端内存中进行计数。在此版本中,我们已将实现更改为对数据库进行单次 count
查询调用。此更改提高了内存使用效率以及方法的响应时间(根据我们的基准测试step-execution-count-benchmark,性能提高了 **6 倍**),从而提高了步骤和作业的整体启动时间
此版本将 Spring 项目依赖项升级到以下版本
Spring Batch v4.3.0-M1 可以与计划于下周发布的 Spring Boot 2.4.0-M1 一起使用。敬请关注!
我要感谢所有贡献者,特别是 Parikshit Dutta 在此版本中的许多贡献!我们期待您在 Twitter、StackOverflow 或 Github 上提供关于此里程碑的反馈。
所有基准测试均在 Macbook Pro 上进行,配置为 16GB 内存、2.9 GHz Intel Core i7 CPU、MacOS Catalina 10.15.5 和 Oracle JDK 1.8.0_201。您可以在以下链接中找到所有基准测试的源代码