1 Spring Batch介绍

企业领域中许多应用系统需要采用批处理的方式在特定环境中运行业务操作任务。这种业务作业包括自动化,大量信息的复杂操作,他们不需要人工干预,并能高效运行。这些典型作业包括:基于时间的事件处理(例如:月底结算,通知或信函);重复的、数据量大的、业务逻辑规则错综复杂的定期任务(例如:保险盈利决策和利率调整);来自内外部不同应用系统的信息集成任务,这些信息需要进行格式化、校验,并通过事务的方式处理成为系统可用的记录。批处理程序就是用来处理这种数以亿计的企业日常事务。

Spring Batch是一个轻量级的,全面的批处理框架,旨在帮助开发人员构建出健壮的用于处理日常事务的企业级批处理系统。Spring Batch 构建于POJO和Spring框架,开发者容易上手,现有的优秀企业级服务也能融合进来。Spring Batch不是一个调度框架。当前开发市场上有许多优秀的企业级调度器,包括付费软件和开源软件,例如Quartz, Tivoli, Control-M等。Spring Batch的设计意图不是来替换它们,而是配合这些调度器协同工作。

Spring Batch提供处理大数据的可复用的核心功能,包括日志/跟踪,事务管理,Job程序统计,job重启,job跳转和资源管理,它同时也提供先进的技术服务和特性,即通过优化和分区技术使得批处理作业达到高容量和高性能。无论简单的,复杂的还是高容量的批处理任务都可以利用该框架的可扩展性来处理大量的信息。

1.1 背景

当开源软件项目和相关的社区重点关注网络和基于SOA消息的体系框架时,java领域仍然缺少一个可复用的批处理框架,企业应用仍在当前的IT环境中处理这样的批处理事务。标准化、可复用的批处理架构的缺失导致IT企业各自开发了一次性的、并只针对本企业内部系统的解决方案,无法复用。

SpringSource和Accenture 计划合作改变这一状况,Accenture在人工处理批处理事务和技术经验提供批处理框架指导,SpringSource具备技术优势和Spring的编程模型优势,双方取长补短组合成自然而强大的伙伴关系,在Java企业级应用中构建高质量的、市场相关度极高的软件以填补这一领域的空白。当前已经有2家公司正在与一些客户解决类似的问题,开发基于Spring的批处理架构方案,这也给我们提供了一些额外的客户使用细节和现实约束,帮助验证该方案应用于客户真实环境中的可用性。正是基于此,SpringSource和Accenture联手合作开发此项目。

Accenture已经贡献了以前专有的批处理体系结构框架,基于过去几代人几十年构建批处理架构的经验,(例如,COBOL/Mainframe大型机, C++/Unix系统, 现在Java/任何环境 )用于Spring Batch 项目的建设,并提供资源支持、提高该项目质量和规划未来的路线图。

Accenture和SpringSource共同努力,致力于推动软件处理方法、架构、框架以及工具的标准化,以便于企业用户在业务批处理应用保持一致性,企业用户和政府可基于Spring Batch构建标准的、已论证过的可用解决方案。

1.2 使用场景

一个典型的批处理程序通常从数据库、文件或队列中读取大量的数据记录,以某种方式处理这些数据,然后把修改后的数据写回。Spring Batch 自动进行循环这些基础批处理,像处理集合一样来处理相似的事务,并在不需要用户干预的离线环境中进行。Batch jobs是大多数IT 项目的组成部分,Spring Batch是目前唯一的健壮的、企业级的开源解决方案。

 业务场景

•  Commit batch process periodically

定期提交批处理程序

•  Concurrent batch processing: parallel processing of a job

并行批处理:作业的并行处理

•  Staged, enterprise message-driven processing

分段式的消息驱动的企业信息处理

•  Massively parallel batch processing

海量的并行处理

•  Manual or scheduled restart after failure

发生故障后的手动或调度重启

•  Sequential processing of dependent steps (with extensions to workflow-driven batches)

有先后依赖关系的串行分步处理(扩展到工作流驱动的批处理)

•  Partial processing: skip records (e.g. on rollback)

部分处理:跳过记录(如回滚)

•  Whole-batch transaction: for cases with a small batch size or existing stored procedures/scripts

整批处理:如批量的小程序或现有的存储过程/脚本

技术目标

•  Batch  developers  use  the  Spring  programming  model:  concentrate  on  business  logic;  let  the framework take care of infrastructure.

Batch开发者使用Spring编程模型:专注于业务处理,让框架管理底层基础架构。

•  Clear separation of concerns between the infrastructure, the batch execution environment, and the batch application.

明确关注点分离:底层基础架构,批处理的执行环境和应用。

•  Provide common, core execution services as interfaces that all projects can implement.

提供公共的、核心的执行服务程序和可供第三方实现的接口

•  Provide simple and default implementations of the core execution interfaces that can be used ‘out of the box’.

提供和框架解耦的、缺省的、核心接口执行程序

•  Easy to configure, customize, and extend services, by leveraging the spring framework in all layers.

通过使用spring framework实现易配置,定制化,易扩展的服务

•  All existing core services should be easy to replace or extend, without any impact to the infrastructure layer.

所有已有的核心服务须易替换,易扩展,并且不需要引入底层架构层

•  Provide a simple deployment model, with the architecture JARs completely separate from the application, built using Maven.

提供简单的部署模型,使用从应用中完全分离的JARs,使用Maven进行构建

1.3 Spring Batch架构

Sring Batch的设计理念兼顾可扩展性和用户群体的多样化。如下图所示,Spring Batch具有支持可扩展并且易用的多层体系结构,供开发者使用。

分层的体系架构突出了3个组要的层级组件: 应用层,核心层和基础层。应用层包括所有的batch jobs和用户自定义的Spring Batch. 核心层包括关键的启动和控制batch job的运行时类,该层包括JobLauncher, Job, 和 Step的实现。应用层和核心层构建在基础层之上。基础层包括公共的Readers和Writers,以及服务类,如RetryTemplate, 这些类被应用层的开发者(ItemReader and ItemWriter)和核心层框架使用。

1.4 批处理的一般性原则和指南

下面是构建批处理解决方案的一些关键原则、指南和通用性注意事项。

•  批处理系统的架构通常会影响线上的系统架构,线上的系统架构也会影响批处理系统的架构。在设计这2个系统的架构和环境时,尽可能使用公共构建模块。

• 尽量简单,避免在单个批处理系统中采用过于复杂的逻辑架构。

•  尽量在离数据存储的位置近的地方处理数据,反之亦然。(在你处理数据的位置保存数据)

• 最小化正在使用的系统资源,尤其是I/O。在内部内存中处理尽量多的操作。

•  检视应用的I/O(分析SQL语句),避免使用不需要的物理I/O。

尤其是下面4个公共缺陷需要注意:

•  每一个事务处理都读取一次数据,这些数据实际上可读取一次后并保存在缓冲区或工作区内存中;

•  在同一个事务操作中重复的读取数据;

•  造成不必要的表或索引查询;

•  在SQL语句中未指定键值.

•  不要在一个批处理执行中进行2次完全相同的操作。如,如果你需要进行数据汇总并做报表,只需要做增量处理,而不需要重复执行已经处理过的数据;

•  在批处理应用开始的时候分配足够的内存,以免内存不够重新分配;

•  做数据完整性的最坏打算。插入足够多的检查和记录验证以保持数据的完整性。

•  增加内部的求和校验。如,flat文件在结尾有一个所有记录的总和以及所有关键字段的总数。

•  尽量早的计划和执行压力测试,在尽量接近真实环境数量级的预生产环境中进行。

•  在大型批处理系统中备份是一件很棘手的事情,尤其系统是持续的7*24小时不间断运行。数据库备份还好说,因为数据库系统已经设计了线上备份,文件不仅要备份在合适的位置,同时需要进行备份记录和常规测试。

1.6 批处理策略

Spring Batch 中文参考文档 V3.0.6 - 1 Spring Batch介绍的更多相关文章

  1. Spring Boot 2.2.2.RELEASE 版本中文参考文档【3.2 - 3.10】

    Spring Boot 2.2.2.RELEASE版本中文文档持续更新中~如有需要获取参考文档文件,关注公众号JavaSo,回复“参考文档”即可. 3.2 结构化代码 Spring Boot不需要任何 ...

  2. Spring Boot 2.2.2.RELEASE 版本中文参考文档【3.1】

    使用Spring Boot 本节将详细介绍如何使用Spring Boot.它涵盖了诸如构建系统,自动配置以及如何运行应用程序之类的主题.我们还将介绍一些Spring Boot最佳实践.尽管Spring ...

  3. DecimalFormat 中的 # 与 0 的区别(中文帮助文档中翻译可能是错误的)

    想对数字进行格式化的时候,可能会使用到 java.text.DecimalFormat 类.中文帮助文档中,有如下符号 位置 本地化 含义 0 数字 是 阿拉伯数字 # 数字 是 阿拉伯数字,如果不存 ...

  4. oracle数据库 PSU,SPU(CPU),Bundle Patches 和 Patchsets 补丁号码快速参考 (文档 ID 1922396.1)

    数据库 PSU,SPU(CPU),Bundle Patches 和 Patchsets 补丁号码快速参考 (文档 ID 1922396.1) 文档内容   用途   详细信息   Patchsets ...

  5. Plupload上传插件中文帮助文档

    Plupload上传插件中文帮助文档 配置参数 实例化一个plupload对象时,也就是 new plupload.Uploader(),需要传入一个对象作为配置参数.后面内容中出现的plupload ...

  6. SpringBoot非官方教程 | 第十篇: 用spring Restdocs创建API文档

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot10-springrestdocs/ 本文出自方志 ...

  7. Mongoose学习参考文档——基础篇

    Mongoose学习参考文档 前言:本学习参考文档仅供参考,如有问题,师请雅正 一.快速通道 1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model ...

  8. css参考文档; 官方英文说明!! 1 margin padding 百分比参照物 2 margin值为auto时的说明 3 div在div里垂直居中方法 4 dispaly:flex说明

    css参考文档        http://css.doyoe.com/ 两篇很好的文章:(下面的css官方英文说明链接 有时间可以研究下 http://www.w3.org/TR/css3-box/ ...

  9. 强大的矢量图形库:Raphael JS 中文帮助文档及教程

    Raphael 是一个用于在网页中绘制矢量图形的 Javascript 库.它使用 SVG W3C 推荐标准和 VML 作为创建图形的基础,你可以通过 JavaScript 操作 DOM 来轻松创建出 ...

随机推荐

  1. arduino编程语言Wiring参考手册API

    对Arduino的编程是利用 Arduino编程语言 (基于 Wiring)和Arduino开发环境(based on Processing)来实现的. 通过编程,Arduino可以实现很多种功能. ...

  2. mysql计划字段中有多少个逗号,或者某个标识符

    eg:计划url中有多少个小数点 select length('www.mysql.com')-length(REPLACE('www.mysql.com','.',''));

  3. OO基本原则

    1. 单一职责原则(SRP)     一个类应该最多只能有一个因素能够给导致其变化,类中的方法应该都是相关性很高的,即"高内聚"   2. 开放-封闭原则(OC)      - 扩 ...

  4. 深度学习(dropout)

    other_techniques_for_regularization 随手翻译,略作参考,禁止转载 www.cnblogs.com/santian/p/5457412.html Dropout: D ...

  5. 07-JAVA继承与接口

    动手动脑: 源程序: public class FuGai { public static void main(String[] args) { // TODO Auto-generated meth ...

  6. git分支管理一

    1.创建本地分支 local_branch git branch local_branch 2.创建本地分支local_branch 并切换到local_branch分支 git checkout - ...

  7. HTML和CSS设置动态导航以及CSS中伪元素的简单说明

    HTML页面代码: <!DOCTYPE html> <html> <head> <title>Test</title> <meta c ...

  8. android app上线后bug的处理

    app上线后,后期维护显得尤为重要,今天给大家分享一下app上线后出现bug后的解决方法 1.继承Application类,重写onCreate方法 import java.io.File; impo ...

  9. ubuntu命令大全

    一.文件/文件夹管理 ls 列出当前目录文件(不包括隐含文件) ls -a 列出当前目录文件(包括隐含文件) ls -l 列出当前目录下文件的详细信息 cd .. 回当前目录的上一级目录 cd - 回 ...

  10. Twitter Bootstrap

    Twitter Bootstrap是一个HTML/CSS/JS框架,适用于移动设备优先的响应式网页开发.主要涉及: HTML:为已有的H5标签扩展了自定义属性 data-* CSS : Reset + ...