领先一步
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上对这个里程碑的反馈。
所有基准测试均在配备16GB RAM、2.9 GHz Intel Core i7 CPU、MacOS Catalina 10.15.5和Oracle JDK 1.8.0_201的Macbook Pro上进行。您可以在以下链接中找到所有基准测试的源代码