前言

  整个章节由浅入深了解Spring Batch,让你掌握批处理利器。面对大批量数据毫无惧色。本章只做介绍,后面章节有代码示例。好了,接下来是我们的主角Spring Batch。

1.1 背景介绍

1.1.1 诞生

  开源社区一直把大部分注意力集中在web和SOA框架中,基于java的批处理框架确很少,因此一个标准的、可重用的批处理框架对我们来说很重要。先来说一下什么是批处理?在企业应用时,需要定期或者人工触发的读入大批量数据,然后完成相应的业务处理并进行归档。这类工作就成为批处理。

  SpringSource和Accenture致力于通过合作来解决这种状况,Accenture在实现批处理架构上有着丰富的产业实践经验,SpringSource则有深厚的技术开发经验,两者成为强大的合作伙伴,创造出高质量的、市场认可的企业级java解决方案。因此诞生了Spring Batch

1.1.2 为什么使用它?

  Spring Batch作为Spring的子项目,是一款轻量级的综合批处理框架,通过它可以构建出壮健的企业级批处理应用,因为基于Spring,所以开发者十分容易上手使用。SpringBatch不仅提供了统一的读写接口、丰富的任务处理方式、可重用的功能,还包括了日志,事务管理,任务统计、弹性处理等功能。使开发人员可以更多的关注业务处理过程。

  Spring Batch不是一个调度框架,因为已经有非常好的企业级调度框架包括Quartz等,它只注重任务处理相关问题,如执行任务、事务、并发等,而不是提供调度功能。它是为了和调度程序一起完成任务而设计的。比如我们希望定期的执行大批量数据任务,那么可结合Quartz等来实现。

1.1.3 应用场景

  大量文件处理是比较常见的企业级应用场景,比如你要做聚合支付,那么必定会有聚合账单,如果每天有百万甚至千万级别的交易数据。那么将如何处理呢?如何进行海量数据的对账成了难题。或者每天需要处理其他业务场景的大数据量的文件,最后将处理好的数据写入数据库中。

  其实可以先不用想Spring Batch,如果没有,我们如何开发?这里就需要一个框架需要以下几点:

  • 支持对多种数据源进行操作
  • 能够定义不同job之间的顺序关系
  • 能够定义每个job的输入和输出数据操作
  • 对异常输入数据有校验机制和弹性处理
  • 支持job重跑等处理机制

  这不就是一个批处理框架需要的基础功能吗?

1.2 Spring Batch架构

1.2.1 框架层次

  Spring Batch分三层,应用层,核心层和基础架构层。

  应用层:开发人员使用Spring Batch编写的所有批处理任务代码

  核心层:包含加载和控制批处理作业所需的核心类,Job,Step等类的实现

  基础架构层:包含通用的读写器和重试模块 

  

1.2.2 概念模型  

  下图显示了完整的概念模型,JobLauncher启动Job,Job可以有多个Step组合,每一个Step由开发者自己编写,可一把一个大Step分成多个小Step,完全看开发者意愿。每一个Step对应一个ItemReader、ItemProcessor和ItemWriter。所有的批处理框架都可以抽象成最简单的过程,读取数据,处理数据,写数据。所以Spring Batch提供了3个接口,ItemReader、ItemProcessor和ItemWriter。JobRepository则是记录Job、Step和发起Job的执行信息等。

  

  下图为处理流程,reader读,processor处理校验数据,writer写数据(入参是list,减少io次数)

  

1.3 处理原则

  下面是一些处理原则,可参考

  • 尽量使用公用模块
  • 尽量简化操作,不要有复杂的业务逻辑。更不要处理一条数据还要调外部接口进行数据加工
  • 尽可能少的IO操作
  • 同一个批处理文件不要处理2次
  • 尽可能压力测试

陪你解读Spring Batch(一)Spring Batch介绍的更多相关文章

  1. Spring Boot整合Spring Batch

    引言 Spring Batch是处理大量数据操作的一个框架,主要用来读取大量数据,然后进行一定的处理后输出指定的形式.比如我们可以将csv文件中的数据(数据量几百万甚至几千万都是没问题的)批处理插入保 ...

  2. Spring Boot下Spring Batch入门实例

    一.About Spring Batch是什么能干什么,网上一搜就有,但是就是没有入门实例,能找到的例子也都是2.0的,看文档都是英文无从下手~~~,使用当前最新的版本整合网络上找到的例子. 关于基础 ...

  3. Spring学习笔记—Spring之旅

    1.Spring简介     Spring是一个开源框架,最早由Rod Johnson创建,并在<Expert One-on-One:J2EE Design and Development> ...

  4. 一句话概括下spring框架及spring cloud框架主要组件

    作为java的屌丝,基本上跟上spring屌丝的步伐,也就跟上了主流技术.spring 顶级项目:Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你 ...

  5. Spring系列(零) Spring Framework 文档中文翻译

    Spring 框架文档(核心篇1和2) Version 5.1.3.RELEASE 最新的, 更新的笔记, 支持的版本和其他主题,独立的发布版本等, 是在Github Wiki 项目维护的. 总览 历 ...

  6. 基于Spring Boot和Spring Cloud实现微服务架构学习

    转载自:http://blog.csdn.net/enweitech/article/details/52582918 看了几周Spring相关框架的书籍和官方demo,是时候开始总结下这中间的学习感 ...

  7. Spring Boot实践——Spring Boot 2.0 新特性和发展方向

    出自:https://mp.weixin.qq.com/s/EWmuzsgHueHcSB0WH-3AQw 以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Jav ...

  8. 基于Spring Boot和Spring Cloud实现微服务架构学习--转

    原文地址:http://blog.csdn.net/enweitech/article/details/52582918 看了几周spring相关框架的书籍和官方demo,是时候开始总结下这中间的学习 ...

  9. 基于Spring Boot和Spring Cloud实现微服务架构

    官网的技术导读真的描述的很详细,虽然对于我们看英文很费劲,但如果英文不是很差,请选择沉下心去读,你一定能收获好多.我的学习是先从Spring boot开始的,然后接触到微服务架构,当然,这一切最大的启 ...

随机推荐

  1. Django 项目搭建(ubuntu系统)

    1 环境搭建 sudo apt-get install python3-pip 安装pip3 sudo pip3 install virtualenv 安装虚拟环境,这里展示virtualenv vi ...

  2. Java基础-递归调用

    意义: 递归算法是一种直接或间接地调用自身的算法.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 所以在工作中我们经常用递归 来进行一些算法操作 比如 ...

  3. mysql5.7安装和修改密码

    mysql5.7安装 第一 下载 https://downloads.mysql.com/archives/community/ 首先下载mysql5.7.18zip安装包 根据电脑配置选择32/64 ...

  4. SDRAM读写状态解析

    SDRAM的写状态流程 IDLE状态到WRITE状态 (1)在IDLE状态需要先给ACT命令激活某一行,此时处于Row Active状态. (2)在Row Active状态之后,给Write命令则会进 ...

  5. sum() 函数性能堪忧,列表降维有何良方?

    本文原创并首发于公众号[Python猫],未经授权,请勿转载. 原文地址:https://mp.weixin.qq.com/s/mK1nav2vKykZaKw_TY-rtw Python 的内置函数 ...

  6. MIP技术交流分享(3月9日)

    3月9日上周四下午,MIP 团队工程师与去哪儿酒店云.众荟的 Web 前端工程师进行了一次面对面的技术交流. 在这次交流中,MIP 工程师主要分享了 MIP 技术原理,MIP 加速原理,以及 MIP ...

  7. Android项目中独立Git项目分库后的编译调试时Gradle的配置

    基于AS开发项目,对于特定的功能模块,往往抽取成独立的库进行管理,然后上传到Marven库中,通过Gradle依赖的方式进行引用. 其优势体现在: 1,独立的Git项目库,模块功能,及职责界定清晰: ...

  8. 安装Mysql时端口号3306被占用,解决方法

    当我们在卸载mysql数据库重新安装的时候,会出现端口号3306被占用的情况 有两种解决方案: 一:可以不使用3306端口,也可以换成别的端口,如3307,3308等等 二:可以打开命令窗口 1.wi ...

  9. .netcore2.1使用swagger显示接口说明文档

    项目之前开发完接口后,我们还需要写接口说明文档,现在有了swagger方便了很多,可以网页版直接测试,当然了也减少了我们的工作量. 使用swagger生成接口说明文档,大致需要2个步骤 1.从“管理 ...

  10. [转]POJ1006: 中国剩余定理的完美演绎

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 117973   Accepted: 37026 Des ...