今天,我们很高兴地宣布 Spring Batch 3.0 的最终里程碑版本(下载)。此版本展示了我们对 JSR-352 的支持,并且目前支持其所有必需功能。我们还为现有的 Spring Batch 用户添加了许多新功能。Spring Batch 是一个轻量级、全面的框架,用于开发健壮的批处理应用程序。
Milestone 3 中的功能
作为 Spring Batch 3.0.0 发布的最后一个里程碑版本,此版本的所有主要功能均已完成。此版本的主要功能包括:
- JSR-352 支持
- 将 Spring Batch Integration 提升到 Spring Batch 名下
- 升级以支持 Spring 4 和 Java 8
- 其他修复和改进
JSR-352 支持
Spring 在我们对该规范的贡献上投入了大量时间和资源。我们通过 JCP、JSR-352 与其他行业专家的合作,验证了 Spring Batch 在过去六年多的生产环境中经过实战检验的批处理模式是构建企业级关键任务批处理应用程序的最佳方法。
3.0.0.M3 是 Spring Batch 第一个符合 JSR-352 的版本,它通过了所有 152 个 SE TCK 测试。Spring Batch 对 JSR-352 的实现允许用户使用熟悉的 Spring Batch 组件,同时保持与 Java 标准的合规性。Spring Batch 支持通过 JSR-352 定义的 XML 进行作业配置,通过 JSR 中定义的注入方法(Spring 的依赖注入、batch.xml 和内联配置)注入针对 javax.batch.* 接口开发的批处理构件,以及 JSR-352 提供的所有可扩展性选项(通过线程进行拆分和分区)。
我们的实现目标很简单:遵守 JSR 规范,同时不破坏 Spring Batch 已制定的规则。换句话说,在不影响现有 Spring Batch 用户的前提下实现规范。我们通过提供两种实现批处理作业的“路径”来实现这一点。第一种是传统的 Spring Batch 方式。使用 Spring Batch 的 XML 或 Spring 的 Java 配置,针对 Spring Batch 接口进行开发等。在 3.0 版本发布后,这部分将保持不变。第二种“路径”是 JSR 路径。这种开发方法使用 JSR-352 定义的 XML 模式来配置作业,使用 JSR 的 JobOperator 来启动作业和管理元数据,并且开发人员针对 JSR 的 API 编写代码。需要注意的是,这是两条截然不同的路径。虽然使用 Spring Batch 组件可以与基于 JSR-352 的作业协同工作,但在这些上下文中使用它们将受 JSR 规则的约束。例如,注入 JSR-352 中定义的上下文(StepContext 和 JobContext)。如果一个作业使用传统的 Spring Batch 方法配置并通过常规 Spring Batch 组件启动,则这些上下文将无法用于批处理构件。但是,如果您通过 JSR-352 XML 配置作业并通过 JSR-352 JobOperator 启动它,则这些上下文将在适当的地方被注入。
需要指出的是,Spring Batch 不仅仅实现了 JSR-352。它在许多方面都远超规范要求:
- 组件 - Spring Batch 提供了 17 种不同的
ItemReader 实现、16 种 ItemWriter 实现,以及其他许多经过多年生产环境测试的组件。
- 可扩展性 - JSR-352 仅为单个 JVM 提供可扩展性选项(通过线程进行分区和拆分)。Spring Batch 提供多 JVM 可扩展性选项,包括远程分区和远程分块。
- Spring 依赖注入 - 虽然 JSR-352 提供了一种“轻量级依赖注入”的形式,但它对批处理构件的构造施加了一些限制(例如,必须使用无参构造函数)。Spring Batch 构建于 Spring 之上,并受益于 Spring 框架能力的强大。
- Java 配置 - 虽然 Spring 的 XML 配置选项广为人知,但 Spring,特别是 Spring Batch,提供了使用 Java 配置的类型安全性来配置作业的选项。
- Hadoop/大数据集成 - Spring Batch 是与 Hadoop 和 Spring 生态系统中其他大数据存储交互的基础工具。Spring for Apache Hadoop 提供了许多与批处理相关的扩展,用于使用 Spring Batch 在 Hadoop 群集上编排工作。Spring XD 在 Spring Batch 的基础上构建,它提供了执行功能,以及类似 Spring Batch Admin 的管理功能,适用于任何环境。
Spring 将继续参与 JSR-352 的演进,因为其将经历维护修订,并期待为 JCP 流程做出进一步贡献。
将 Spring Batch Integration 提升到 Spring Batch 名下
Spring Batch Integration 曾是 Spring Batch Admin 的一个鲜为人知的子项目,已有几年时间。然而,考虑到该库提供的功能非常强大且对企业开发很有用,我们决定将其从 Spring Batch Admin 的保护伞下移至 Spring Batch 的保护伞下。Spring Batch Integration 旨在提供有用的组件,用于连接批处理和集成处理,并提供多种启动和扩展批处理应用程序的选项。功能包括:
- 异步 ItemProcessor/ItemWriter - 在另一个线程上执行
ItemProcessor 逻辑,向 ItemWriter 返回一个 Future。一旦 Future 返回,结果就会被写入。
JobLaunchingMessageHandler/JobLaunchingMessageGateway - 允许通过频道接收的 Spring 消息来启动作业。
- 远程分块 - 允许通过主从配置远程(跨多个 JVM)执行
ItemProcessor 逻辑。
- 远程分区 - 允许通过主从配置远程(跨多个 JVM)执行完整的块(读取/处理/写入)。
这些组件使得 Spring Batch 应用程序能够无缝集成和扩展到许多企业。
升级以支持 Spring 4 和 Java 8
作为我们努力更新依赖的一部分,我们已更新 Spring Batch 及其各种模块以支持 Spring 4。由于这些更新,Spring 4 将是 Spring Batch 3.0.0.M3 的最低支持 Spring 版本。这不仅带来了 Spring 4 中的大量新功能,而且还提供了立即在 Java 8 上运行的能力。
其他修复和改进
除了上述大型新功能外,我们还添加了一些较小的功能并继续修复 bug。我们添加的新功能包括添加了 JobScope 和对 SQLite 的支持。
发布候选版本路线图
还剩下什么?随着我们接近发布候选版本,仍有一些小的收尾工作要做。我们仍在仔细审查 Spring Batch 的依赖项,并希望尽可能多地进行升级。
结论
3.0.0.M3 标志着 Spring Batch 的一个关键里程碑。它允许开发人员测试基于 JSR-352 的功能,同时仍然可以依赖 Spring 和 Spring Batch 的基础。它还为框架带来了新功能。我们期待您在论坛、社交媒体和现场的评论和反馈!