Spring Batch 介绍

本站( springdoc.cn )中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。

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

  • 对大量信息进行自动、复杂的处理,在没有用户互动的情况下,处理效率最高。这些操作通常包括基于时间的事件(如月末计算、通知或信件)。

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

  • 整合从内部和外部系统收到的信息,这些信息通常需要格式化、验证,并以事务的方式处理到记录系统中。批量处理被用来为企业每天处理数十亿的事务。

Spring Batch是一个轻量级的综合批处理框架,旨在实现对企业系统的日常运作至关重要的强大批处理应用的开发。Spring Batch建立在人们所期望的Spring框架的特点之上(生产力、基于POJO的开发方法和一般的易用性),同时使开发者在必要时能够轻松地访问和使用更高级的企业服务。Spring Batch不是一个调度框架。在商业和开源领域都有许多优秀的企业调度器(如Quartz、Tivoli、Control-M等)。Spring Batch旨在与调度器一起工作,而不是取代调度器。

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

背景介绍

尽管开源软件项目和相关社区将更多的注意力集中在基于网络和微服务的架构框架上,但却明显缺乏对可重复使用的架构框架的关注,以适应基于Java的批处理需求,尽管企业IT环境中继续需要处理这种处理。由于缺乏一个标准的、可重复使用的批处理架构,导致许多一次性的、在客户企业IT职能部门开发的内部解决方案大量涌现。

SpringSource(现为VMware)和埃森哲(Accenture)合作改变了这种状况。埃森哲在实施批处理架构方面的实际行业和技术经验,SpringSource的深厚技术经验,以及Spring成熟的编程模型,共同构成了一种自然而有力的伙伴关系,创造出高质量的、与市场相关的软件,旨在填补企业Java的重要空白。两家公司都与一些客户合作,他们通过开发基于Spring的批量架构解决方案来解决类似的问题。这种投入提供了一些有用的额外细节和现实生活中的限制,有助于确保解决方案能够应用于客户提出的现实世界的问题。

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

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

使用场景

一般来说,一个典型的批处理程序:

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

  • 以某种方式处理数据。

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

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

业务场景

Spring Batch支持以下业务场景:

  • 定期提交批处理。

  • 并发批处理:对job进行并行处理。

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

  • 大规模并行批处理。

  • 故障后手动或预定重启。

  • 从属 step 的顺序处理(扩展到工作流驱动的批处理)。

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

  • 整批事务,适用于小批量或现有存储程序或脚本的情况。

技术目标

Spring Batch有以下技术目标:

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

  • 在基础设施、批处理执行环境和批处理应用之间提供明确的关注点分离。

  • 提供共同的、核心的执行服务,作为所有项目都可以实现的接口。

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

  • 通过在所有层中使用Spring框架,使配置、定制和扩展服务变得容易。

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

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