下圖是經(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批處理框架》