陪你解读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开始的,然后接触到微服务架构,当然,这一切最大的启 ...
随机推荐
- 解决jenkins slave 中文乱码 encoding=ANSI_X3.4-1968
jenkins配置slave进行构建时,发现slave构建的控制台输入中文乱码,查看master,slave的jenkins系统信息 file.encoding和sun.jnu.encoding都没有 ...
- Spark学习之数据读取与保存总结(二)
8.Hadoop输入输出格式 除了 Spark 封装的格式之外,也可以与任何 Hadoop 支持的格式交互.Spark 支持新旧两套Hadoop 文件 API,提供了很大的灵活性. 要使用新版的 Ha ...
- SSRS报表服务随笔(rdl报表服务)-创建一个简单的报表
这段时间一直在敲rdl报表,在国内的不这么留在,在国外的话,还是挺流行的,国内的话,这方面的资料很少很少,也踏过不少坑 先从SSRS了解起,SSRS全称 SQL Server Reporting Se ...
- Python爬虫入门教程 56-100 python爬虫高级技术之验证码篇2-开放平台OCR技术
今日的验证码之旅 今天你要学习的验证码采用通过第三方AI平台开放的OCR接口实现,OCR文字识别技术目前已经比较成熟了,而且第三方比较多,今天采用的是百度的. 注册百度AI平台 官方网址:http:/ ...
- CentOS 7.6 使用kubeadm安装Kubernetes 13
实验环境:VMware Fusion 11.0.2 操作系统:CentOS 7.6 主机名 IP地址 CPU 内存 k8s2m 172.16.183.151 2核 4G k8s2n 172.16.18 ...
- Python:读取 .doc、.docx 两种 Word 文件简述及“Word 未能引发事件”错误
概述 Python 中可以读取 word 文件的库有 python-docx 和 pywin32. 下表比较了各自的优缺点. 优点 缺点 python-docx 跨平台 只能处理 .docx 格式 ...
- POLARDB · 最佳实践 · POLARDB不得不知道的秘密
## 前言 POLARDB作为阿里云下一代关系型云数据库,自去年9月份公测以来,收到了不少客户的重点关注,今年5月份商业化后,许多大客户开始陆续迁移业务到POLARDB上,但是由于POLARDB的很多 ...
- 2018年如何快速学Java
前言 只有光头才能变强 提前预警:本文适合Java新手阅读(老手可在评论区给下建议),希望大家看完能有所收获. 一.为什么我要写下这篇文章 1.1直接缘由: 在今天(2018年11月4日)有个同学给我 ...
- 补习系列(19)-springboot JPA + PostGreSQL
目录 SpringBoot 整合 PostGreSQL 一.PostGreSQL简介 二.关于 SpringDataJPA 三.整合 PostGreSQL A. 依赖包 B. 配置文件 C. 模型定义 ...
- C# 接口的使用(工厂模式)
接口(interface)与抽象类(abstract)的区别: 相同点: 1.都不能被直接实例化,都可以通过继承实现其抽象方法. 2.都是面向抽象编程的技术基础,实现诸多模式 不同点: 1.接口可以多 ...