Spring Batch Introduction

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

  • 自动化、复杂的信息大批量处理,不通过用户交互就能最高效地处理。这些操作通常包括基于时间事件(例如月底计算、通知或联系信)。

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

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

Spring Batch 是一个轻量级、全面的批处理框架,旨在支持开发强大的批处理应用程序,这些应用程序对于企业系统的日常操作至关重要。Spring Batch 建立在人们所期望的 Spring Framework 特征(高效、基于 POJO 的开发方法和整体易用性)之上,同时在必要时让开发人员可以轻松访问和使用更高级的企业服务。Spring Batch 不是一个调度框架。企业中有许多优秀的调度程序(如 Quartz、Tivoli、Control-M 等)可供使用,既有商业版也有开源版。Spring Batch 的用途是与调度程序配合使用,而不是取代调度程序。 Spring Batch 提供可重用函数,这些函数对于处理大量记录至关重要,包括日志记录和跟踪、事务管理、作业处理统计、作业重启、跳过和资源管理。它还提供更高级的技术服务和功能,通过优化和分区技术支持处理海量数据的高性能批处理作业。你可以在简单用例(例如将文件读入数据库或运行存储过程)和复杂的海量用例(例如在数据库之间移动大量数据和对其进行转换)中使用 Spring Batch。海量批处理作业可以以高度可扩展的方式使用该框架来处理大量信息。

Background

尽管开源软件项目和相关社区更加关注基于 Web 和基于微服务的架构框架,但一直未能重视可重用的架构框架以适应基于 Java 的批处理需求,尽管企业 IT 环境中始终需要处理此类批处理。缺乏标准、可重用的批处理架构导致客户端企业 IT 功能中出现了大量一次性的内部解决方案。

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

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

埃森哲与 SpringSource 之间的合作旨在促进企业用户在创建批处理应用程序时的软件处理方法、框架和工具标准化。希望为其企业 IT 环境交付标准且久经考验的解决方案的公司和政府机构可以受益于 Spring Batch。

Usage Scenarios

典型的批处理程序通常:

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

  • 以某种方式处理数据。

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

Spring Batch 自动执行此基本批处理迭代,提供将类似事务处理为一组处理的能力,通常在没有用户交互的情况下在脱机环境中进行。批处理作业是大多数 IT 项目的一部分,而 Spring Batch 是唯一提供强大的企业级解决方案的开源框架。

Business Scenarios

Spring Batch 支持以下业务场景:

  • Commit batch process periodically.

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

  • Staged, enterprise message-driven processing.

  • Massively parallel batch processing.

  • 失败后手动或按计划重新启动。

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

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

  • 对于批次大小小或现有存储过程或脚本的情况,采用全批处理事务。

Technical Objectives

Spring Batch 具有以下技术目标:

  • 让批处理开发人员使用 Spring 编程模型:专注于业务逻辑,并让框架负责基础架构。

  • 明确分离基础架构、批处理执行环境和批处理应用程序之间的关注点。

  • 提供所有项目都能实现的界面形式的通用核心执行服务。

  • 提供可用于"`out of the box`" 的核心执行接口的简单且默认的实现。

  • 通过在所有层中使用 Spring 框架,使服务易于配置、自定义和扩展。

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

  • 提供一个简单的部署模型,其中体系结构 JAR 与由 Maven 构建的应用程序完全分离。