Spring Batch No.2_Spring Batch 基本概念

下圖是經(jīng)典批處理框架的架構圖:

每個作業(yè)Job有1個或多個作業(yè)步Step更鲁;每個Step對應一個ItemReader谴蔑、ItemProcessor烘豹、ItemWriter喂江;通過Job Launcher可以啟動Job妒潭,啟動Job時需要從JobRepository獲取存在的JobExecution悴能;當前運行的Job及Step的結果和狀態(tài)會保存在JobRepository中。

下面列出Spring Batch中用到的主要領域?qū)ο螅?/p>

領域?qū)ο?/th> 描述
Job 作業(yè)雳灾。批處理中的核心概念漠酿,是Batch操作的基礎單元
Job Instance 作業(yè)實例。每個作業(yè)執(zhí)行時谎亩,都會生成一個實例炒嘲,實例會被存放到JobRepository中,如果作業(yè)失敗匈庭,下次重新執(zhí)行該作業(yè)的時候夫凸,會使用同一個作業(yè)實例;對Job和Job Instance的關系阱持,可以想象為Java類定義與Java對象實例的關系
Job Parameters 作業(yè)參數(shù)夭拌。它是一組用來啟動批處理任務的參數(shù),在啟動Job的時候衷咽,可以設置任何需要的作業(yè)參數(shù)鸽扁,需要注意作業(yè)參數(shù)會用來表示作業(yè)實例,即不同的Job實例時通過Job參數(shù)來區(qū)分的镶骗。
Job Execution 作業(yè)執(zhí)行器桶现。其負責具體Job的執(zhí)行,每次運行Job都會啟動一個新的Job執(zhí)行器
Job Repository 作業(yè)倉庫鼎姊。其負責存儲作業(yè)執(zhí)行過程中的狀態(tài)數(shù)據(jù)及結果骡和,為JobLauncher相赁,Job,Step提供標準的CRUD實現(xiàn)
Job Launcher 作業(yè)調(diào)度器慰于。根據(jù)給定的JobParameters執(zhí)行作業(yè)
Step 作業(yè)步噪生。Job的一個執(zhí)行環(huán)節(jié),多個或一個Step組裝成Job东囚,封裝了批處理任務中的一個獨立的連續(xù)階段
Step Execution 作業(yè)步執(zhí)行器跺嗽。負責Step的執(zhí)行,每次運行Step都會啟動一個新的執(zhí)行器
Tasklet Tasklet页藻。Step中具體執(zhí)行邏輯的操作桨嫁,可以重復執(zhí)行,可以設置具體的同步份帐、異步操作等
Execution Context 執(zhí)行上下文璃吧。是一組框架持久化與控制的key/value對,能夠讓開發(fā)者在Step Execution或Job Execution范疇保存需要持久化的狀態(tài)
Item 條目废境。一條數(shù)據(jù)記錄
Chunk Item集合畜挨。給定數(shù)量Item的集合,可以定義對Chunk的讀操作噩凹、處理操作巴元、寫操作,提交間隔等
Item Reader 條目讀驮宴。其表示step讀取數(shù)據(jù)逮刨,一次讀取一條
Item Processor 條目處理。用于表示item的業(yè)務處理
Item Writer 條目寫堵泽。用于表示step輸出數(shù)據(jù)修己,一次輸出一批

3.1 Job

批處理作業(yè)Job由一組Step組成,同時是作業(yè)配置文件的頂層元素迎罗。每個作業(yè)有自己的名字睬愤,可以定義Step執(zhí)行的順序,以及定義作業(yè)是否可以重啟纹安。Job的主要屬性:

Job執(zhí)行的時候會生成一個Job Instance尤辱,Job Instance包含執(zhí)行Job期間產(chǎn)生的數(shù)據(jù)以及Job執(zhí)行的狀態(tài)信息等;Job Instance通過Job Name和Job Parameter來區(qū)分钻蔑;每次Job執(zhí)行的時候都有一個Job Execution啥刻,Job Execution負責具體job的執(zhí)行。Job咪笑,Job Instance 和 Job Execution三者的關系如:

一個Job可能有一到多個Job Instance可帽。
一個Job Instance可能有一到多個Job Execution。

3.1.1 Job Instance

Job Instance是一個運行期的概念窗怒,Job每執(zhí)行一次都會涉及一個Job Instance映跟。
Job Instance來源可能有兩種:一種是根據(jù)設置的Job Parameters從Job Repository中獲取一個蓄拣;如果根據(jù)Job Parameters從Job Repository沒有獲取Job Instance,則新創(chuàng)建一個新的Job Instance努隙。

3.1.2 Job Parameters

Job通過Job Parameters來區(qū)分不同的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執(zhí)行的句柄,根據(jù)上面描述可知岭洲,一次Job的執(zhí)行可能成功也可能失敗宛逗。只有Job Execution執(zhí)行成功后,對應的Job Instance才會被完成盾剩。

3.2 Step

Step表示作業(yè)中的一個完整步驟雷激,一個Job可以由一個或多個Step組成。Step包含一個實際運行的批處理任務中的所有必須的信息告私,Step可以是非常簡單的業(yè)務實現(xiàn)屎暇,比如打印"Hello World"信息,也可以是非常復雜的業(yè)務處理德挣,Step的復雜程度通常是由業(yè)務決定的恭垦。

Step與Job的關系如下圖:

一個Job可以擁有一個到多個Step快毛,一個Step可以由一到多個Step Execution(當一個Step執(zhí)行失敗格嗅,下次重新執(zhí)行任務的時候,會為該Step重新生成一個Step Execution)唠帝;一個Job Execution可以有一到多個Step Execution(當一個Job由多個Step組成時屯掖,每個Step執(zhí)行都會生成一個新的Step Execution,則一個Job Execution會擁有多個Step Execution)襟衰。

3.2.2 Step Execution

Step Execution是Step執(zhí)行的句柄贴铜。一次Step執(zhí)行可能成功也可能失敗。

3.3 Execution Context

Execution Context是Spring Batch框架提供的持久化與控制的key/value對瀑晒,能夠讓開發(fā)者在Step Execution或Job Execution中保存需要進行持久化的狀態(tài)绍坝。

3.4 Job Repository

Spring Batch框架提供Job Repository來存儲Job執(zhí)行期的元數(shù)據(jù)(這里的元數(shù)據(jù)指的是Job Instance,Job Execution苔悦,Job Parameters轩褐,Step Execution,Execution Context等數(shù)據(jù))玖详,并提供兩種默認實現(xiàn)把介。一種是存放到內(nèi)存中勤讽;另一種是存放到數(shù)據(jù)庫中。通過將元數(shù)據(jù)存放在數(shù)據(jù)庫中拗踢,可以隨時監(jiān)控批處理Job的執(zhí)行狀態(tài)脚牍,查看Job執(zhí)行結果是成功還是失敗,使得在Job失敗的情況下重新啟動Job成為可能巢墅。

3.5 Job Launcher

Job Launcher(作業(yè)調(diào)度器)是Spring Batch框架基礎設置層提供的運行Job的能力诸狭。通過給定的Job名稱和作業(yè)參數(shù)Job Parameters,可以通過Job Launcher執(zhí)行Job君纫。通過Job Launcher可以在Java程序中調(diào)用批處理任務作谚,也可以在通過命令行或者其他框架中調(diào)用批處理任務。Spring Batch框架提供了Job Launcher的簡單實現(xiàn)SimpleJobLauncher:


該接口只有一個run方法庵芭,兩個參數(shù)job和jobParameters妹懒。批處理應用可以通過Job Launcher和外部系統(tǒng)交互,通常情況下外部系統(tǒng)可以同步也可以異步調(diào)用批處理應用双吆。

3.6 ItemReader

ItemReader是Step中對資源的讀出來眨唬,Spring Batch框架已經(jīng)提供了多種類型的讀實現(xiàn),包括文本文件好乐,XML文件匾竿,數(shù)據(jù)庫,JMS消息等蔚万。直接使用Spring Batch框架提供的讀組件可以快速地完成批處理應用的開發(fā)和搭建岭妖。

上面所有的組件均實現(xiàn)ItemReader接口,接口定義參見:

3.7 ItemProcessor

ItemProcessor階段表示對數(shù)據(jù)進行處理反璃,開發(fā)者可以實現(xiàn)自己的業(yè)務操作來對數(shù)據(jù)進行處理昵慌。

業(yè)務操作需要實現(xiàn)ItemProcessor接口,接口定義參見:

process方法中淮蜈,參數(shù)item時ItemReader讀取的數(shù)據(jù)斋攀,返回值O是交給ItemWriter寫的數(shù)據(jù)。

3.8 ItemWriter

ItemWriter是Step中對資源的寫處理梧田,Spring Batch框架已經(jīng)提供了多種類型的寫實現(xiàn)淳蔼。

上面的組件均實現(xiàn)了ItemWriter接口:

【參考】
[1] 《Spring Batch批處理框架》

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市裁眯,隨后出現(xiàn)的幾起案子鹉梨,更是在濱河造成了極大的恐慌,老刑警劉巖穿稳,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件存皂,死亡現(xiàn)場離奇詭異,居然都是意外死亡司草,警方通過查閱死者的電腦和手機艰垂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門泡仗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人猜憎,你說我怎么就攤上這事娩怎。” “怎么了胰柑?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵截亦,是天一觀的道長。 經(jīng)常有香客問我柬讨,道長崩瓤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任踩官,我火速辦了婚禮却桶,結果婚禮上,老公的妹妹穿的比我還像新娘蔗牡。我一直安慰自己颖系,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布辩越。 她就那樣靜靜地躺著嘁扼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪黔攒。 梳的紋絲不亂的頭發(fā)上趁啸,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音督惰,去河邊找鬼不傅。 笑死,一個胖子當著我的面吹牛姑丑,可吹牛的內(nèi)容都是我干的蛤签。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼栅哀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了称龙?” 一聲冷哼從身側響起留拾,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鲫尊,沒想到半個月后痴柔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡疫向,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年咳蔚,在試婚紗的時候發(fā)現(xiàn)自己被綠了豪嚎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡谈火,死狀恐怖侈询,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情糯耍,我是刑警寧澤扔字,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站温技,受9級特大地震影響革为,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舵鳞,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一震檩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜓堕,春花似錦恳蹲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至霜旧,卻和暖如春错忱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挂据。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工以清, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人崎逃。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓掷倔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親个绍。 傳聞我的和親對象是個殘疾皇子勒葱,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容