Spring Batch 4.2.0.RC1 发布了!

版本发布 | Mahmoud Ben Hassine | 2019年9月17日 | ...

我代表 Spring Batch 团队很高兴宣布 Spring Batch 4.2.0.RC1 已发布。我们一直在努力改进核心框架的一些性能,本文重点介绍主要的变更。

主要的性能改进

我们进行了一些性能改进,包括

增强的步骤分区

启动一个分区步骤是框架之前未很好优化的地方。在此版本中,我们深入研究了分区过程,以找出此性能问题的根本原因。分区过程的主要步骤之一是查找上次步骤执行(以查看当前执行是否是重新启动)。我们发现,查找上次步骤执行涉及将给定作业实例的所有作业执行中的所有步骤执行加载到内存中,这显然效率低下!

我们用一个在数据库级别进行查找的 SQL 查询替换了这段代码,以便只返回上次步骤执行。结果非常出色:根据我们的基准测试 partitioned-step-benchmark,使用这种方法将步骤执行分区到 5000 个分区几乎快了 10 倍。

perf-partitioning

改进的作业停止

运行作业时可能会出错... 并且为了避免数据损坏,优雅地停止一个有破坏性的作业应该快速高效。直到 v4.1 版本,使用 CommandLineJobRunner 停止作业的性能很差,因为为了查找当前是否有作业执行正在运行,需要将所有作业执行加载到内存中。使用这种方法,对于包含数千个作业执行的生产数据库,停止一个作业可能需要几分钟!

在此版本中,我们通过使用一个在数据库级别进行过滤的 SQL 查询来优化了停止过程。同样,结果令人印象深刻:根据我们的基准测试 stop-benchmark,对于数据库中包含 10 万个给定作业的作业执行,使用这种方法停止作业几乎快了 40 倍。

perf-stop

使用 JpaItemWriter 更快的写入

JpaItemWriter 使用 javax.persistence.EntityManager#merge 函数在 JPA 持久化上下文中写入项目。当项目的持久化状态未知或已知为更新时,这样做是有意义的。然而,在许多文件摄取作业中,数据已知是新的且应视为插入,此时使用 javax.persistence.EntityManager#merge 效率不高。

在此版本中,我们在 JpaItemWriter 中引入了一个新选项,在这种情况下可以使用 persist 而不是 merge。根据我们的基准测试 jpa-writer-benchmark,使用此新选项,使用 JpaItemWriter 向数据库插入 100 万个项目的文件摄取作业速度提高了 2 倍。

perf-jpaitemwriter

使用 BeanWrapperFieldSetMapper 优化的 Bean 映射

BeanWrapperFieldSetMapper 提供了一个很好的特性,允许我们对给定 JavaBean 的字段名使用模糊匹配(驼峰命名、嵌套属性等)。但是,当字段名与列名匹配时,可以通过将 distanceLimit 参数设置为 0 来启用精确匹配。

在此版本中,我们修复了 BeanWrapperFieldSetMapper 中的一个性能问题,该问题是在每次迭代中都使用反射内省字段名,即使请求了精确匹配(通过设置 distanceLimit=0)。根据我们的 JMH 基准测试 bean-mapping-benchmark,结果是项目映射现在比之前版本快 1.5 倍。

perf-mapping

反馈

请注意,这些数字在您的实际情况中可能会有所不同。我们鼓励您试用 Spring Batch 4.2.0.RC1(可与 Spring Boot 2.2.0.M6 一起使用)并分享您的反馈。有关完整的变更列表,请参阅版本 4.2.0.RC14.2.0.M3 的变更日志。

您可以在 Twitter 上联系 @michaelminella@b_e_n_a_s,或在 StackOverflowGitter 上提问。如果您发现任何问题,请在 Jira 上创建工单。

下一步是什么

我们计划在即将于 2019 年 9 月 30 日发布的 Spring Batch 4.2.0.RELEASE 版本中稳定此新发布候选版本。敬请关注!

脚注

所有基准测试均在配备 16Go RAM、2.9 GHz Intel Core i7 CPU、MacOS Mojave 10.14.5、Oracle JDK 1.8.0_201 的 Macbook Pro 上进行。您可以在以下链接中找到所有基准测试的源代码

Spring Batch 主页 | GitHub 上的源代码 | 参考文档

订阅 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

快人一步

VMware 提供培训和认证,助您加速前进。

了解更多

获取支持

Tanzu Spring 通过一个简单的订阅提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持及二进制文件。

了解更多

即将举办的活动

查看 Spring 社区中即将举办的所有活动。

查看全部