今天,我们很高兴地宣布 Spring Batch 3.0 的最终里程碑版本发布 (下载)。此版本展示了我们对 JSR-352 的支持,并且目前支持其所有必需的功能。我们还为现有 Spring Batch 用户添加了许多新功能。Spring Batch 是一个轻量级、全面的框架,用于开发健壮的批处理应用程序。
里程碑版本 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 是第一个符合 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 和其他大数据存储交互的基础工具。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
逻辑,将 Future
返回给 ItemWriter
。一旦 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 上运行的功能。
其他修复和改进
除了上述大型新功能之外,我们还添加了一些较小的功能并继续修复错误。我们添加的新功能包括添加 JobScope
和对 SQLite 的支持。
发布候选版本的路线图
那么接下来是什么?随着我们接近发布候选版本,仍有一些少量的工作要做。我们仍在仔细研究 Spring Batch 的依赖项,并努力尽可能多地进行升级。
结论
3.0.0.M3 是 Spring Batch 的一个重要里程碑。它允许开发人员测试基于 JSR-352 的功能,同时仍然拥有 Spring 和 Spring Batch 的基础可以依赖。它还为框架带来了新功能。我们期待您在论坛、社交媒体和亲自发表您的评论和反馈!