前言

  整个章节由浅入深了解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. BZOJ_1878_[SDOI2009]HH的项链_莫队

    BZOJ_1878_[SDOI2009]HH的项链_莫队 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考 ...

  2. 【Unity游戏开发】Lua中的os.date和os.time函数

    一.简介 最近马三在工作中经常使用到了lua 中的 os.date( ) 和 os.time( )函数,不过使用的时候都是不得其解,一般都是看项目里面怎么用,然后我就模仿写一下.今天正好稍微有点空闲时 ...

  3. Python数据结构应用5——排序(Sorting)

    在具体算法之前,首先来看一下排序算法衡量的标准: 比较:比较两个数的大小的次数所花费的时间. 交换:当发现某个数不在适当的位置时,将其交换到合适位置花费的时间. 冒泡排序(Bubble Sort) 这 ...

  4. 加密算法:DigestUtils与java MessageDigest

    1.使用Spring的DigestUtils public class StringUtilTest { static final String TARGET = "changeme&quo ...

  5. Android Gradle基于参数化配置实现差异化构建

    一.背景: 项目中有一些特殊的需求,如个别渠道集成腾讯bugly,个别渠道集成易观统计,不同的渠道集成不同的推送策略(如Oppo渠道优先Opush推送),不同的渠道拥有不同的第三方登录集成等等.这些需 ...

  6. eShopOnContainers 知多少[9]:Ocelot gateways

    引言 客户端与微服务的通信问题永远是一个绕不开的问题,对于小型微服务应用,客户端与微服务可以使用直连的方式进行通信,但对于对于大型的微服务应用我们将不得不面对以下问题: 如何降低客户端到后台的请求数量 ...

  7. samba 基本配置及自定义控制

    Samba简介: Samba实现的是Linux和Windows之间的一种共享,为两种不同的操作系统架起了一座桥梁,使Linux系统和Windows系统之间能够实现互相通信,共享文件系统.打印机及其他资 ...

  8. 死磕 java集合之PriorityBlockingQueue源码分析

    问题 (1)PriorityBlockingQueue的实现方式? (2)PriorityBlockingQueue是否需要扩容? (3)PriorityBlockingQueue是怎么控制并发安全的 ...

  9. XiaomiPushDemo【小米推送集成,基于V3.6.12版本】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个Demo只是记录小米推送的集成,不能运行. 使用步骤 一.项目组织结构图 注意事项: 1.  导入类文件后需要change包名以 ...

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

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