今天,我们高兴地宣布 Spring Batch 3.0 的最终里程碑版本发布(下载)。此版本展示了我们对 JSR-352 的支持,目前支持其所有必需功能。我们还为现有 Spring Batch 用户添加了许多 Spring Batch 的新功能。Spring Batch 是一个轻量级、全面的框架,用于开发强大的批处理应用程序。
里程碑版本 3 中的功能
作为 Spring Batch 3.0.0 版本的最终里程碑版本,此版本的所有主要功能均已完成。此版本的主要功能包括
- JSR-352 支持
- 将 Spring Batch 集成提升到 Spring Batch
- 升级以支持 Spring 4 和 Java 8
- 其他修复和改进
JSR-352 支持
Spring 已投入大量时间和资源来为该规范做出贡献。我们通过 JCP 与其他行业专家合作,JSR-352 验证了 Spring Batch 在过去六年中在无数生产环境中实施和测试的批处理模式是构建企业中关键任务批处理应用程序的最佳方法。
3.0.0.M3 是第一个符合 JSR-352 的 Spring Batch 版本,因为它通过了所有 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 Framework 功能的强大功能。
- 基于 Java 的配置 - 虽然 Spring 的基于 XML 的配置选项众所周知,但 Spring,特别是 Spring Batch,提供了使用基于 Java 的配置的类型安全来配置作业的选项。
- Hadoop/大数据集成 - Spring Batch 是在 Spring 生态系统中与 Hadoop 和其他大数据存储交互的基础工具。用于 Apache Hadoop 的 Spring 提供了许多与批处理相关的扩展,可以使用 Spring Batch 来协调 Hadoop 集群上的工作。Spring XD 在 Spring Batch 的基础上构建,它不仅提供执行能力,还提供类似于 Spring Batch Admin 的管理功能,适用于任何环境。
Spring 将继续参与 JSR-352 的演进,因为它将经历维护修订,并期待对 JCP 过程的进一步贡献。
将 Spring Batch 集成提升到 Spring Batch
Spring Batch 集成一直是 Spring Batch Admin 的一个鲜为人知的子项目,已经存在几年了。但是,鉴于该库提供的功能的强大性和其在企业开发中的实用性,我们决定将其从 Spring Batch Admin 的保护伞下移至 Spring Batch 的保护伞下。Spring Batch 集成旨在提供连接批处理和集成处理的有用组件,它提供了许多启动和扩展批处理应用程序的选项。其功能包括:
- 异步 ItemProcessor/ItemWriter - 在另一个线程上执行
ItemProcessor
逻辑,向ItemWriter
返回一个Future
。Future
返回后,写入结果。
JobLaunchingMessageHandler
/JobLaunchingMessageGateway
- 提供通过通道接收到的 Spring 消息启动作业的能力。
- 远程分块 - 通过主/从配置,提供远程执行
ItemProcessor
逻辑(跨多个 JVM)的能力。
- 远程分区 - 通过主/从配置,提供远程执行完整块(跨多个 JVM 读取/处理/写入)的能力。
这些组件使 Spring Batch 应用程序能够在许多企业中无缝集成和扩展。
升级以支持 Spring 4 和 Java 8
作为保持依赖项更新的工作的一部分,我们已经更新了 Spring Batch 及其各种模块以支持 Spring 4。由于这些更新,Spring 4 将成为 Spring Batch 3.0.0.M3 的最低支持版本。这不仅带来了 Spring 4 中众多新功能,还提供了立即在 Java 8 上运行的能力。
其他修复和改进
除了上述大型新功能外,我们还添加了一些较小的功能并继续修复错误。我们添加的新功能包括添加JobScope
和对 SQLite 的支持。
发布候选版本的路线图
还剩下什么?随着我们接近发布候选版本,仍有一些少量工作要做。我们仍在仔细研究 Spring Batch 的依赖项,并寻求尽可能多地升级。
结论
3.0.0.M3 标志着 Spring Batch 的一个关键里程碑。它允许开发人员测试基于 JSR-352 的功能,同时仍然拥有 Spring 和 Spring Batch 的基础。它还为框架带来了新功能。我们期待您在论坛、社交媒体和线下发表评论和反馈!