spring batch (一) 常见的基本的概念介绍
SpringBatch的基本概念介绍
内容来自《Spring Batch 批处理框架》,作者:刘相。
一、配置文件
在项目中使用spring batch 需要在配置文件中声明:
事务管理器:ResourceTransactionManager
任务仓库:MapJobRepositoryFactoryBean
任务加载器:SimpleJobLauncher(作业调度器)
二、基本介绍
在spring batch 中一个任务Job由 一个或者多个步骤Step组成,一个步骤Step由读操作Reader、处理操作Procesor、写操作Writer组成。JobLauncher是任务启动器,可以看作是程序的入口。
三、spring batch 主要对象
| 对象 | 描述 |
| Job | 作业。批处理中的核心概念,是Batch操作的基础单元 |
| JobInstance | 作业实例。每个作业执行时,都会生成一个实例,实例会被存放在JobRepository中,如果作业失败,下次重新执行该作业时,会使用同一个作业实例。对于Job和JobInstance的关系,可以理解为Java中类和实例对象的关系。 |
| JobParameters | 作业参数。它是一组用来启动批处理任务的参数,在启动Job的时候,可以设置任何需要的作业参数。需要注意的是作业参数会用来标识作业实例,即不同的Job实例是通过Job参数的来区分的。 |
| JobExecution | 作业执行器。负责具有Job的执行,每次运行Job都回启动一个新的Job执行器。 |
| JobRepository | 作业仓库。主要负责存储作业执行过程中的状态数据和结果。为JobLauncher、Job、Step提供标准的CRUD实现。 |
| JobLauncher | 作业调度器(任务启动器)。它根据给定的JobParameters执行作业。 |
| Step | 作业步(操作步)。Job的一个执行环节,多个或者一个Step组成Job,封装了批处理任务中的一个独立的连续阶段。 |
| StepExecution | 作业步执行器。负责具体Step的执行。每次运行Step都会启动一个新的执行器。 |
| Tasklet |
Tasklet。step中具体执行逻辑的操作。可以重复执行。可以设置具体的同步、异步操作等。 |
| ExecutionContext | 执行上下文。它是一组框架持久化与控制的key/value对,能够让开发者在StepExecution或JobExecution范畴保存需要进行持久化的状态。 |
| Item | 条目。一条数据记录。 |
| Chunk | Item集合。它是给定数量Item的集合。可以定义对读操作、处理操作、写操作,提交间隔等。 |
| ItemReader | 条目读(读操作)。表示Step读取数据,一次读取一条数据。 |
| ItemProcessor | 条目处理(处理操作)。用于表示Item的业务处理。 |
| ItemWriter | 条目写(写操作)。用于表示Step输出数据,一次输出一条。 |
四、对象介绍
1.Job
批处理作业Job是由一组Step组成的,同时也是作业配置文件的顶层的元素。一般每个跑批Job都会有一个配置文件,在配置文件中配置Job的内容。如:每个Job都有自己唯一的id(名字),定义Step的执行顺序,定义作业是否可以重启等 。
Job执行的时候会生成一个Job Instance(作业实例),Job Instance包含执行Job期间产生的数据以及Job的执行状态信息等。Job Instance是通过Job Name(作业名称)和Job Parameters(作业参数)来区分的。每次Job执行的时候都会有一个Job Execution(作业执行器),Job Execution负责具体Job的执行。
一个Job可能有一个或多个Job Instance。
一个Job Instance可能有一个或多个Job Execution。(如果不理解往下看)
2.Job Instance
Job Instance(作业实例)是一个运行期概念,Job每次执行都会涉及一个Job Instance。
Job Instance来源有两种可能:一种是根据设置的Job Parameters从Job Repository(作业仓库)中获取,第二中是如果根据设置的Job Parameters没有从Job Repository中获取到,则新创建一个Job Instance。
3.Job Parameters
一个Job通过Job Parameters来区分不同的Job Instance。如果同一个Job,Job Name一样的话,则Job Parameters肯定不一样,但是对于不同的Job来说,允许有相同的Job Parameters。也就是说Job Instance = Job Name + Job Parameters。
Job Parameters共支持四种类型的参数:String、Date、Long、Double。同时Spring Batch框架提供了通过JobParametersBuilder来构建参数,如下:

也可以查看相应的数据库表:BATCH_JOB_EXECUTION_PARAMS。
如果Job Name 和 Job Parameters 都相同的情况下执行Job 则会报异常。
4.Job Execution
Job Execution表示Job执行的句柄。一次Job的执行可能成功也可能失败,只有Job Execution执行成功时才会生成相应的Job Instance。这就是为什么一个Job Instance对应一个或多个Job Execution。
Job Execution对应的数据库是:BATCH_JOB_EXECUTION
Job Execution对应的Java类是:org.springframework.batch.core.JobExecution。
JobExecution主要的属性和表的字段差不多,其中属性中executionContext是:包含运行过程中所有需要被持久化的用户数据。
5.Step
Step表示作业中一个完整的步骤,一个Job可以有一个或多个Step,Step包含一个实际运行的批处理任务中的所有必须处理的信息。一个Step可以有一个或多个Step Execution。当一个Job由多个Step组成时,每个Step执行都会生成一个新的Step Execution,则一个Job Execution就会拥有多个Step Execution。
比如reader、processor、writer是一个Step,合并文件是一个Step,创建信号文件是一个Step。
Step中可以配置tasklet、partition、job、flow等。
6.Step Execution
Step Execution是Step执行的句柄。和Job Execution相似。一个Step可以有一个或多个Step Execution。
Step Execution对应的数据库是:BATCH_STEP_EXECUTION
Step Execution对应的Java类是:org.springframework.batch.core.StepExecution。
Step执行的过程是由StepExecution类的对象所表示的,包括每次执行对应的step、Job Execution、相关的事务操作等,此外每次执行step时还包含一个ExecutionContext,用来存放开发者在批处理运行过程中所需要的任何信息。
7.Execution Context
Execution Context是Spring Batch框架提供的持久化与控制的key/value对,能够让开发者在Step Execution或Job Execution中保存需要进行持久化的状态。框架会在每次commit后记录当前的提交记录数和读的记录数,保证继续从上次失败的点重新执行。
Execution Context分为两类:一类是Job Execution的上下文(对应表:BATCH_JOB_EXECUTION_CONTEXT),另一类是Step Execution的上下文(对应表:BATCH_STEP_EXECUTION_CONTEXT)。两类上下文之间的关系:一个Job Execution对应一个Job Execution上下文;每个Step Execution对应一个Step Execution 上下文;同一个Job中的Step Execution 共用Job Execution上下文。因此如果同一个Job不同的Step间需要共享数据,则可以从Job Execution的上下文共享数据。
8.Job Repository
Spring Batch框架提供Job Repository来存储Job执行期的元数据(这里的元数据是指:Job Instance、Job Execution、Job Parameters、Step Execution、Execution Context等),并提供两种默认实现方式。一种是存放在内存中,一种是将元数据存放在数据库中。
spring batch (一) 常见的基本的概念介绍的更多相关文章
- 初探Spring Batch
此系列博客皆为学习Spring Batch时的一些笔记: 为什么我们需要批处理? 我们不会总是想要立即得到需要的信息,批处理允许我们在请求处理之前就一个既定的流程开始搜集信息:比如说一个银行对账单,我 ...
- 图书简介:Spring Batch批处理框架
大数据时代批处理利器,国内首度原创解析Spring Batch框架. 内容简介: <Spring Batch 批处理框架>全面.系统地介绍了批处理框架Spring Batch,通过详尽的实 ...
- Spring Batch 批处理框架介绍
前言 在大型的企业应用中,或多或少都会存在大量的任务需要处理,如邮件批量通知所有将要过期的会员,日终更新订单信息等.而在批量处理任务的过程中,又需要注意很多细节,如任务异常.性能瓶颈等等.那么,使用一 ...
- Spring Batch基本概念
Spring batch主要有以下部分组成: JobRepository 用来注册job的容器 JobLauncher 用来启动Job的接口 Job ...
- Spring Batch 专题
如今微服务架构讨论的如火如荼.但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易.在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理.针对OLTP,业界有大量的开源框架.优秀的架 ...
- spring batch批量处理框架
spring batch精选,一文吃透spring batch批量处理框架 前言碎语 批处理是企业级业务系统不可或缺的一部分,spring batch是一个轻量级的综合性批处理框架,可用于开发企业信息 ...
- 【转】大数据批处理框架 Spring Batch全面解析
如今微服务架构讨论的如火如荼.但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易.在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理.针对OLTP,业界有大量的开源框架.优秀的架 ...
- Spring Batch 批处理框架
<Spring Batch 批处理框架>基本信息作者: 刘相 出版社:电子工业出版社ISBN:9787121252419上架时间:2015-1-24出版日期:2015 年2月开本:16开页 ...
- 陪你解读Spring Batch(一)Spring Batch介绍
前言 整个章节由浅入深了解Spring Batch,让你掌握批处理利器.面对大批量数据毫无惧色.本章只做介绍,后面章节有代码示例.好了,接下来是我们的主角Spring Batch. 1.1 背景介绍 ...
随机推荐
- mac svn无法保存密码,JetBrains IDE(WebStrom、IntelliJ IDEA) 反复提示输入密码
一.vim ~/.subversion/config用vim修改以下四个地方store-passwords = yesstore-plaintext-passwords = yesstore-ssl- ...
- OrCAD Capture CIS 16.6 从PDF文档中提取引脚定义,实现快速地编辑Part的引脚名称
操作系统:Windows 10 x64 工具1:OrCAD Capture CIS 16.6-S062 (v16-6-112FF) 工具2:Excel 工具3:Solid Converter 打开需要 ...
- JMeter Ultimate Thread Group阶梯式减压
选择或者搜索Stantard Set标准集, 我们要用的Ultimate Thread Group最终线程组包含在里面: 下载完成之后,JMeter会自动重启. 添加最终线程组: 还是以打开博客园首页 ...
- OpenCV imread读取jpg图像的一个大坑
长话短说 版本区间[OpenCV3.0.0, OpenCV3.4.1]内的OpenCV,(至少在windows下,使用官方提供的预编译版本),imread读取jpg图片后的像素值,和版本区间[Open ...
- beta冲刺2/7
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(2/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 整理博客 做了点商家数据表格 接下来的计划 做 ...
- easyui提交form表单接受数据处理、
$('#Form').form('submit', { url:"withdrawal/bankAuthenticate4List.do", onSubmit: function( ...
- Codeforces 455A Boredom (线性DP)
<题目链接> 题目大意:给定一个序列,让你在其中挑选一些数,如果你选了x,那么你能够得到x分,但是该序列中所有等于x-1和x+1的元素将全部消失,问你最多能够得多少分. 解题分析:从小到大 ...
- BeautifulSoup学习 之结构
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag NavigableString BeautifulSoup Co ...
- LOJ.2864.[IOI2018]排座位(线段树)
LOJ 洛谷 先令编号从\(1\)开始.我们要求\([1,i]\)这些数字能否构成一个矩形. 考虑能否用线段树维护,让每个叶子节点\(i\)表示前\(i\)个数能否构成矩形. 一种方法是维护前\(i\ ...
- Java反射通过getter和setter方法实现类的拷贝
private User copyFieldValues(User userData, User user) { Field[] fields = user.getClass().getDeclare ...