Spring Batch No.2_Spring Batch 基本概念

下图是经典批处理框架的架构图:

每个作业Job有1个或多个作业步Step;每个Step对应一个ItemReader、ItemProcessor、ItemWriter;通过Job Launcher可以启动Job,启动Job时需要从JobRepository获取存在的JobExecution;当前运行的Job及Step的结果和状态会保存在JobRepository中。

下面列出Spring Batch中用到的主要领域对象:

领域对象 描述
Job 作业。批处理中的核心概念,是Batch操作的基础单元
Job Instance 作业实例。每个作业执行时,都会生成一个实例,实例会被存放到JobRepository中,如果作业失败,下次重新执行该作业的时候,会使用同一个作业实例;对Job和Job Instance的关系,可以想象为Java类定义与Java对象实例的关系
Job Parameters 作业参数。它是一组用来启动批处理任务的参数,在启动Job的时候,可以设置任何需要的作业参数,需要注意作业参数会用来表示作业实例,即不同的Job实例时通过Job参数来区分的。
Job Execution 作业执行器。其负责具体Job的执行,每次运行Job都会启动一个新的Job执行器
Job Repository 作业仓库。其负责存储作业执行过程中的状态数据及结果,为JobLauncher,Job,Step提供标准的CRUD实现
Job Launcher 作业调度器。根据给定的JobParameters执行作业
Step 作业步。Job的一个执行环节,多个或一个Step组装成Job,封装了批处理任务中的一个独立的连续阶段
Step Execution 作业步执行器。负责Step的执行,每次运行Step都会启动一个新的执行器
Tasklet Tasklet。Step中具体执行逻辑的操作,可以重复执行,可以设置具体的同步、异步操作等
Execution Context 执行上下文。是一组框架持久化与控制的key/value对,能够让开发者在Step Execution或Job Execution范畴保存需要持久化的状态
Item 条目。一条数据记录
Chunk Item集合。给定数量Item的集合,可以定义对Chunk的读操作、处理操作、写操作,提交间隔等
Item Reader 条目读。其表示step读取数据,一次读取一条
Item Processor 条目处理。用于表示item的业务处理
Item Writer 条目写。用于表示step输出数据,一次输出一批

3.1 Job

批处理作业Job由一组Step组成,同时是作业配置文件的顶层元素。每个作业有自己的名字,可以定义Step执行的顺序,以及定义作业是否可以重启。Job的主要属性:

Job执行的时候会生成一个Job Instance,Job Instance包含执行Job期间产生的数据以及Job执行的状态信息等;Job Instance通过Job Name和Job Parameter来区分;每次Job执行的时候都有一个Job Execution,Job Execution负责具体job的执行。Job,Job Instance 和 Job Execution三者的关系如:

一个Job可能有一到多个Job Instance。
一个Job Instance可能有一到多个Job Execution。

3.1.1 Job Instance

Job Instance是一个运行期的概念,Job每执行一次都会涉及一个Job Instance。
Job Instance来源可能有两种:一种是根据设置的Job Parameters从Job Repository中获取一个;如果根据Job Parameters从Job Repository没有获取Job Instance,则新创建一个新的Job Instance。

3.1.2 Job Parameters

Job通过Job Parameters来区分不同的Job Instance。简单的说Job Name + Job Parameters来唯一确定一个Job Instance。如果Job Name一样,则Job Parameters肯定不一样;但是对于不同的Job来说,允许有相同额Job Parameters。Job Instance,Job Name 和 Job Parameters三个关系如下图:

3.1.3 Job Execution

Job Execution表示Job执行的句柄,根据上面描述可知,一次Job的执行可能成功也可能失败。只有Job Execution执行成功后,对应的Job Instance才会被完成。

3.2 Step

Step表示作业中的一个完整步骤,一个Job可以由一个或多个Step组成。Step包含一个实际运行的批处理任务中的所有必须的信息,Step可以是非常简单的业务实现,比如打印"Hello World"信息,也可以是非常复杂的业务处理,Step的复杂程度通常是由业务决定的。

Step与Job的关系如下图:

一个Job可以拥有一个到多个Step,一个Step可以由一到多个Step Execution(当一个Step执行失败,下次重新执行任务的时候,会为该Step重新生成一个Step Execution);一个Job Execution可以有一到多个Step Execution(当一个Job由多个Step组成时,每个Step执行都会生成一个新的Step Execution,则一个Job Execution会拥有多个Step Execution)。

3.2.2 Step Execution

Step Execution是Step执行的句柄。一次Step执行可能成功也可能失败。

3.3 Execution Context

Execution Context是Spring Batch框架提供的持久化与控制的key/value对,能够让开发者在Step Execution或Job Execution中保存需要进行持久化的状态。

3.4 Job Repository

Spring Batch框架提供Job Repository来存储Job执行期的元数据(这里的元数据指的是Job Instance,Job Execution,Job Parameters,Step Execution,Execution Context等数据),并提供两种默认实现。一种是存放到内存中;另一种是存放到数据库中。通过将元数据存放在数据库中,可以随时监控批处理Job的执行状态,查看Job执行结果是成功还是失败,使得在Job失败的情况下重新启动Job成为可能。

3.5 Job Launcher

Job Launcher(作业调度器)是Spring Batch框架基础设置层提供的运行Job的能力。通过给定的Job名称和作业参数Job Parameters,可以通过Job Launcher执行Job。通过Job Launcher可以在Java程序中调用批处理任务,也可以在通过命令行或者其他框架中调用批处理任务。Spring Batch框架提供了Job Launcher的简单实现SimpleJobLauncher:


该接口只有一个run方法,两个参数job和jobParameters。批处理应用可以通过Job Launcher和外部系统交互,通常情况下外部系统可以同步也可以异步调用批处理应用。

3.6 ItemReader

ItemReader是Step中对资源的读出来,Spring Batch框架已经提供了多种类型的读实现,包括文本文件,XML文件,数据库,JMS消息等。直接使用Spring Batch框架提供的读组件可以快速地完成批处理应用的开发和搭建。

上面所有的组件均实现ItemReader接口,接口定义参见:

3.7 ItemProcessor

ItemProcessor阶段表示对数据进行处理,开发者可以实现自己的业务操作来对数据进行处理。

业务操作需要实现ItemProcessor接口,接口定义参见:

process方法中,参数item时ItemReader读取的数据,返回值O是交给ItemWriter写的数据。

3.8 ItemWriter

ItemWriter是Step中对资源的写处理,Spring Batch框架已经提供了多种类型的写实现。

上面的组件均实现了ItemWriter接口:

【参考】
[1] 《Spring Batch批处理框架》

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容