初探Spring Batch
此系列博客皆为学习Spring Batch时的一些笔记;
为什么我们需要批处理?
- 我们不会总是想要立即得到需要的信息,批处理允许我们在请求处理之前就一个既定的流程开始搜集信息;比如说一个银行对账单,我们可以按月生成,并在用户查询之前开启一个批处理流程进行处理;
- 有时候它能让生意做得更好;比如说在线购物时,并不是说你买了一个产品零售商就立即发货,而是四五个小时后,统一发货;
- 更好的利用资源;让应该利用的处理能力闲置起来是一个大的浪费,我们可以定制处理让一个机器一个接一个的运行Job可以更好的利用机器的处理能力;
什么是批处理?
批处理是指在没有与用户进行交互和干扰的情况下进行数据处理,一旦开始,一个批处理流程应该在没有任何干扰的情况下运行至结束;
为什么要使用Spring Batch?
- 可维护性,Spring Batch能让你依靠Spring框架所提倡的依赖注入去解耦对象,凭借Spring所提供的测试工具生成健壮的一系列测试单元,这些都让你的维护风险最小化;
- 灵活性,使用Spring Batch,你能在系统之间共享代码,如你能使用那些在你的Web应用程序中已经被测试和调试过的服务;
- 可扩展性,在一个完全没有事务管理的Batch Job中,你只需要记住一些原则,并通过一些简单的配置就可以让整个批处理流程具有事务回滚和Commit的能力;
- 学习曲线低,如果你有过使用Spring的经验,你只需很小的学习曲线就能使用Spring Batch,因为Spring Batch建立在Spring框架的基础之上,它遵循Spring的惯例,像其他基于Spring的应用程序那样,使用Spring的其它特征;
- 活跃的社区支持;
Spring Batch的背景及组成
Spring Batch框架是埃森哲和SpringSource合作项目,它利用一个基于标准的方式去实现常见的批处理模式和范例;它实现的特征包括:数据验证、输出格式化、用一种可重用的方式去实现复杂的业务规则、处理大数据集的能力;
Spring Batch由3层组成:

第一层是应用程序层,包括:所有的自定义代码、为建立批处理流程的所有配置、业务逻辑和服务;注意应用程序层并不处于其它两层的上方,而是封装了其它两层(核心层和基础框架层),原因是在应用程序层中绝大多数你所开发的自定义代码都是和核心层一起工作的;
应用程序层绝大部分时候是和下一层(核心层)进行交互,核心层包含了定义“批处理域”的所有部分,核心组件的元素包括Job和Step接口,同时也包括执行Job的所有接口:JobLauncher和JobParameter;
最下面一层是基础框架层,为了做一些处理,你需要从文件、数据库中读写数据,或者应付一个Job失败的情况,这些部分被视作为常见的基础框架,被放置在Framework的基础框架组件里面。
注意:Spring Batch最常见的误解是它是一个scheduler,但在Spring Batch中没有任何一种方式能让一个Job在某个预定的时间或者被某个事件触发时启动,这些都是通过外部的方式来做到
使用Spring Batch来定义Job
Spring Batch包含了很多领域特定的概念,其间就包括Job,一个Job是指由很多Step组成的一个流程,当一个Step失败之后,这个Job可能会重新运行也可能不会重新运行,一个Job的流程也可能基于某个条件来运行;我们可以在一个applicationContext文件中这样来定义一个Job:
<bean id="accountTasklet"
class="com.thoughtworks.springBatchDemo.AccountTasklet"/>
<job id="accountJob">
<step id="accountStep">
<tasklet ref="accountTasklet"/>
</step>
</job>
Spring Batch Admin Project
Spring Batch提供了很多管理工具,例如启动或停止Spring Batch Job、查看上次Job运行情况的统计信息;Spring Batch将这些功能都包含在一个新的插件里:Spring Batch Admin Project,它提供了一个基于Web的控制中心,让你能对你的批处理流程实施控制,并能监控批处理的性能。
初探Spring Batch的更多相关文章
- 大量数据也不在话下,Spring Batch并行处理四种模式初探
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring相关文章:Springboot-Cloud 前面写了一篇文章<通过例子讲解Spring Batch入门,优 ...
- Spring Batch远程分区的本地Jar包模式
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring相关文章:Springboot-Cloud Spring Batch远程分区对于大量数据的处理非常擅长,它的实现 ...
- Spring Batch在大型企业中的最佳实践
在大型企业中,由于业务复杂.数据量大.数据格式不同.数据交互格式繁杂,并非所有的操作都能通过交互界面进行处理.而有一些操作需要定期读取大批量的数据,然后进行一系列的后续处理.这样的过程就是" ...
- spring batch资料收集
spring batch官网 Spring Batch在大型企业中的最佳实践 一篇文章全面解析大数据批处理框架Spring Batch Spring Batch系列总括
- Spring Batch学习笔记三:JobRepository
此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch Job在运行时有很多元数据,这些元数据一般会被保存在内存或者数据库中,由于Spring Batch在默认配置是使用H ...
- Spring Batch学习笔记二
此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自 ...
- Spring Batch 中文参考文档 V3.0.6 - 1 Spring Batch介绍
1 Spring Batch介绍 企业领域中许多应用系统需要采用批处理的方式在特定环境中运行业务操作任务.这种业务作业包括自动化,大量信息的复杂操作,他们不需要人工干预,并能高效运行.这些典型作业包括 ...
- Spring Batch 批处理框架
<Spring Batch 批处理框架>基本信息作者: 刘相 出版社:电子工业出版社ISBN:9787121252419上架时间:2015-1-24出版日期:2015 年2月开本:16开页 ...
- [Spring Batch] 图解Spring Batch原理
找到一副以前学习的图,稻清楚的描述了Spring Batch运行原理:
随机推荐
- 不能用con作为类名
A class file was not written. The project may be inconsistent, if so try refreshing this project and ...
- 大端小端系统_union_栈的增长方向
一道题引发的思考: 1.看一下之前写的union的特点,理解一下共享内存的概念 2.栈的增长方向是从高地址向低地址增长(数组比较特别,a[0]在低地址,a[n-1]在高地址)(堆由低地址到高地址存储) ...
- Oracle EBS Setup
1. Prevent close other forms after close original form
- netfiler源代码分析之框架介绍
netfiler框架是在内核协议栈实现的基础上完成的,在报文从网口接收,路由等方法实现基础上使用NF_HOOK调用相应的钩子来进入netfiler框架的处理,如 ip_rcv之后会调用NF_HOOK( ...
- VS2015编译Qt5.7.0生成支持XP的静态库(很不错)
一.编译工具 1.VS2015 编译Qt5.7.0的所需VS版本:Visual Studio 2013 (Update1)或Visual Studio 2015 (Update2).因为Update补 ...
- caffe中的BatchNorm层
在训练一个小的分类网络时,发现加上BatchNorm层之后的检索效果相对于之前,效果会有提升,因此将该网络结构记录在这里,供以后查阅使用: 添加该层之前: layer { name: "co ...
- 去除select的样式
select::-ms-expand { display: none } .info-select { width: 88px; height: 25px; border: none; outline ...
- WinServer2003 文件夹共享 方法设置
文件夹设置: 5.假设我们在E盘有一个wmpub文件夹要设置在网络中共享,让大家都可以看到,首先我们右键点击WMPUB文件夹[共享和安全],弹出对话框,选择[共享此文件夹],点击[权限],弹出的对话框 ...
- 使用CTE减少统计子查询
Set Statistics IO ON SET STATISTICS TIME ON --/*--原来语句 DECLARE @CkNo nvarchar(4000),@ProWarn int,@Sk ...
- C++ 中的std::vector介绍(转)
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec ...