Spring Batch 简介

企业领域中的许多应用程序都需要批量处理才能在关键任务环境中执行业务操作。这些业务操作包括:

  • 自动化、复杂地处理大量信息,这些信息最有效率的处理方式是不需要用户交互。这些操作通常包括基于时间的事件(例如月末计算、通知或信函)。

  • 定期应用复杂的业务规则,对非常大的数据集重复处理(例如,保险福利确定或费率调整)。

  • 集成从内部和外部系统接收的信息,这些信息通常需要格式化、验证和以事务方式处理到记录系统中。批量处理用于每天为企业处理数十亿笔交易。

Spring Batch 是一个轻量级、全面的批处理框架,旨在支持开发强大的批处理应用程序,这些应用程序对于企业系统的日常运行至关重要。Spring Batch 基于人们期望的 Spring Framework 的特性(生产力、基于 POJO 的开发方法和易用性),同时使开发人员能够轻松访问和使用更高级的企业服务(如有必要)。Spring Batch 不是调度框架。在商业和开源领域中,都有许多优秀的企业调度程序(例如 Quartz、Tivoli、Control-M 等)可用。Spring Batch 旨在与调度程序协同工作,而不是替换调度程序。

Spring Batch 提供了处理大量记录时必不可少的可重用功能,包括日志记录和跟踪、事务管理、作业处理统计信息、作业重启、跳过和资源管理。它还提供更高级的技术服务和功能,通过优化和分区技术实现极高容量和高性能的批处理作业。您可以将 Spring Batch 用于简单的用例(例如将文件读入数据库或运行存储过程)和复杂的、高容量用例(例如在数据库之间移动大量数据、转换数据等等)。高容量批处理作业可以高度可扩展的方式使用该框架来处理大量信息。

背景

虽然开源软件项目和相关社区更加关注基于 Web 和微服务的架构框架,但在满足基于 Java 的批处理需求的可重用架构框架方面,却存在明显的不足,尽管在企业 IT 环境中仍然需要处理此类处理。缺乏标准的可重用批处理架构导致许多一次性内部解决方案在客户端企业 IT 功能中大量涌现。

SpringSource(现为 VMware)和埃森哲合作改变了这一现状。埃森哲在实施批处理架构方面的实践行业和技术经验、SpringSource 深厚的技术经验以及 Spring 经过验证的编程模型共同构成了一个自然而强大的合作关系,旨在创建高质量、与市场相关的软件,以填补企业 Java 中的重要空白。两家公司都与许多客户合作,这些客户通过开发基于 Spring 的批处理架构解决方案来解决类似的问题。此输入提供了一些有用的附加细节和现实约束,有助于确保该解决方案可以应用于客户提出的现实世界问题。

埃森哲为 Spring Batch 项目贡献了以前专有的批处理架构框架,以及提交者资源以推动支持、增强功能和现有功能集。埃森哲的贡献基于几十年来在使用几代平台构建批处理架构的经验:大型机上的 COBOL、Unix 上的 C++,以及现在的任何地方的 Java。

埃森哲和 SpringSource 之间的合作旨在促进企业用户在创建批处理应用程序时可以一致使用的软件处理方法、框架和工具的标准化。希望为其企业 IT 环境提供标准、成熟解决方案的公司和政府机构可以从 Spring Batch 中获益。

使用场景

典型的批处理程序通常:

  • 从数据库、文件或队列读取大量记录。

  • 以某种方式处理数据。

  • 以修改后的形式写回数据。

Spring Batch 自动化了这个基本的批处理迭代,提供了将类似事务作为集合处理的能力,通常在没有用户交互的离线环境中。批处理作业是大多数 IT 项目的一部分,Spring Batch 是唯一提供强大、企业级解决方案的开源框架。

业务场景

Spring Batch 支持以下业务场景:

  • 定期提交批处理过程。

  • 并发批处理:作业的并行处理。

  • 分阶段的企业消息驱动处理。

  • 大规模并行批处理。

  • 故障后手动或计划重启。

  • 依赖步骤的顺序处理(以及对工作流驱动批处理的扩展)。

  • 部分处理:跳过记录(例如,回滚时)。

  • 全批事务,用于批次大小较小或存在存储过程或脚本的情况。

技术目标

Spring Batch 具有以下技术目标:

  • 允许批处理开发者使用Spring编程模型:专注于业务逻辑,让框架处理基础设施。

  • 在基础设施、批处理执行环境和批处理应用程序之间提供清晰的分层。

  • 提供所有项目都可以实现的通用核心执行服务接口。

  • 提供核心执行接口的简单默认实现,可以“开箱即用”。

  • 通过在所有层使用Spring框架,简化服务的配置、定制和扩展。

  • 所有现有的核心服务都应该易于替换或扩展,而不会对基础设施层产生任何影响。

  • 提供简单的部署模型,架构JAR与应用程序完全分离,使用Maven构建。