陪你解读Spring Batch(一)Spring Batch介绍
前言
整个章节由浅入深了解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介绍的更多相关文章
- Spring Boot整合Spring Batch
引言 Spring Batch是处理大量数据操作的一个框架,主要用来读取大量数据,然后进行一定的处理后输出指定的形式.比如我们可以将csv文件中的数据(数据量几百万甚至几千万都是没问题的)批处理插入保 ...
- Spring Boot下Spring Batch入门实例
一.About Spring Batch是什么能干什么,网上一搜就有,但是就是没有入门实例,能找到的例子也都是2.0的,看文档都是英文无从下手~~~,使用当前最新的版本整合网络上找到的例子. 关于基础 ...
- Spring学习笔记—Spring之旅
1.Spring简介 Spring是一个开源框架,最早由Rod Johnson创建,并在<Expert One-on-One:J2EE Design and Development> ...
- 一句话概括下spring框架及spring cloud框架主要组件
作为java的屌丝,基本上跟上spring屌丝的步伐,也就跟上了主流技术.spring 顶级项目:Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你 ...
- Spring系列(零) Spring Framework 文档中文翻译
Spring 框架文档(核心篇1和2) Version 5.1.3.RELEASE 最新的, 更新的笔记, 支持的版本和其他主题,独立的发布版本等, 是在Github Wiki 项目维护的. 总览 历 ...
- 基于Spring Boot和Spring Cloud实现微服务架构学习
转载自:http://blog.csdn.net/enweitech/article/details/52582918 看了几周Spring相关框架的书籍和官方demo,是时候开始总结下这中间的学习感 ...
- Spring Boot实践——Spring Boot 2.0 新特性和发展方向
出自:https://mp.weixin.qq.com/s/EWmuzsgHueHcSB0WH-3AQw 以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Jav ...
- 基于Spring Boot和Spring Cloud实现微服务架构学习--转
原文地址:http://blog.csdn.net/enweitech/article/details/52582918 看了几周spring相关框架的书籍和官方demo,是时候开始总结下这中间的学习 ...
- 基于Spring Boot和Spring Cloud实现微服务架构
官网的技术导读真的描述的很详细,虽然对于我们看英文很费劲,但如果英文不是很差,请选择沉下心去读,你一定能收获好多.我的学习是先从Spring boot开始的,然后接触到微服务架构,当然,这一切最大的启 ...
随机推荐
- Rmq Problem/mex BZOJ3339 BZOJ3585
分析: 一开始没看懂题... 后来想用二分答案却不会验证... 之后,想到用主席树来维护... 建一个权值线段树,维护出这个权值以前所有的点最晚在哪里出现... 之后,查一下是不是比查询区间的l断点大 ...
- css3波纹特效、H5实现动态波浪
css3实现动态波纹特效,由于css3里面有过渡和动画效果,现在利用css3实现动态波浪效果就很简单了,直接使用transform来实现就ok, 使得translateX 产生偏移就可以不断实现循环动 ...
- css中固定宽高div与不固定宽高div垂直居中的处理办法
固定高宽div垂直居中 如上图,固定高宽的很简单,写法如下: position: absolute; left: 50%; top: 50%; width:200px; height:100px; m ...
- 如何优雅地在 Spring Boot 中使用自定义注解,AOP 切面统一打印出入参日志 | 修订版
欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...
- wGenerator如何编写模板
编写模板大致分为4个步骤: 确定开发语言与数据库类型 分析表数据类型与语言的类型对应 分析代码中哪些可以规整为模板 编写与测试模板 我们对照流程图看的话会更加清晰: 1.如何分析表数据与开发语言的类型 ...
- PdfReader按页将PDF切割成多个PDF
private MemoryStream GetNewPdfByPageNum(PdfReader pdfReader, int pageNum) { MemoryStream memoryStrea ...
- ES 18 - (底层原理) Elasticsearch写入索引数据的过程 以及优化写入过程
目录 1 Lucene操作document的流程 1.1 添加document的流程 1.2 删除document的流程 2 优化写入流程 - 实现近实时搜索 2.1 流程的改进思路 2.2 设置re ...
- cshtml中正则表达式使用后台代码
//定义变量 bool a = false; //正则表达式 string b = @" ^ (13[0 - 9] | 14[5 | 7] | 15[0 | 1 | 2 | 3 | 5 | ...
- 使用JDBC操作MySQL数据库
一.JDBC简介 JDBC(Java DataBase Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一的访问,它由一组用Java语言编写的类和接口组 ...
- CSS关联选择器的大致类型总结
1.包含选择符(A F) 选择所有被A元素包含的F元素,中间用空格隔开 2.子选择符(A>F) 选择所有作为A元素的直接子元素F,对更深一层的元素不起作用,用大括号表示. 3.相邻选择符(A+F ...