Spring Batch No.1_Spring Batch簡介

1.1、什么是批處理

在現(xiàn)代企業(yè)應(yīng)用中叁鉴,面對復(fù)雜的業(yè)務(wù)以及海量的數(shù)據(jù),除了通過龐雜的人機(jī)交互界面進(jìn)行各種批處理外佛寿,還有一類工作幌墓,不需要人工干預(yù),只需要定期讀入大批量數(shù)據(jù)冀泻,然后完成相應(yīng)業(yè)務(wù)并進(jìn)行歸檔克锣。這類工作稱為批處理

從上面的描述可以看出腔长,批處理應(yīng)用有如下幾個特點(diǎn):
· 數(shù)據(jù)量大袭祟,少則百萬,多則上億的數(shù)量級捞附。
· 不需要人工干預(yù)巾乳,由系統(tǒng)根據(jù)配置自動完成。
· 與時間相關(guān)鸟召,如每天執(zhí)行一次或每月執(zhí)行一次胆绊。

同時,批處理應(yīng)用又明顯分為三個環(huán)節(jié):
· 讀數(shù)據(jù)欧募,數(shù)據(jù)可能來自文件压状、數(shù)據(jù)庫或消息隊(duì)列等。
· 數(shù)據(jù)處理,如電信支撐系統(tǒng)的計(jì)費(fèi)處理种冬。
· 寫數(shù)據(jù)镣丑,將輸出結(jié)果寫入文件、數(shù)據(jù)庫或消息隊(duì)列等娱两。

下面是一個典型的批處理應(yīng)用場景:系統(tǒng)A從數(shù)據(jù)庫中獲取數(shù)據(jù)莺匠,經(jīng)過業(yè)務(wù)處理后,導(dǎo)出系統(tǒng)B需要的數(shù)據(jù)到文件中十兢,系統(tǒng)B讀取該文件趣竣,經(jīng)過業(yè)務(wù)處理后,最后存放到數(shù)據(jù)庫中旱物。

批處理典型應(yīng)用場景示意圖

1.2遥缕、Spring Batch

Spring Batch 作為 Spring 的子項(xiàng)目,是一款基于 Spring 的企業(yè)批處理框架宵呛。通過它可以構(gòu)建出健壯的企業(yè)批處理應(yīng)用单匣。Spring Batch 不僅提供了統(tǒng)一的讀寫接口、豐富的任務(wù)處理方式烤蜕、靈活的事務(wù)管理及并發(fā)處理封孙,同時還支持日志迹冤、監(jiān)控讽营、任務(wù)重啟與跳過等特性,大大簡化了批處理應(yīng)用開發(fā)泡徙,將開發(fā)人員從復(fù)雜的任務(wù)配置管理過程中解放出來橱鹏,使他們可以更多地去關(guān)注核心的業(yè)務(wù)處理過程。

另外我們還需要知道堪藐,Spring Batch 是一款批處理應(yīng)用框架莉兰,不是調(diào)度框架。它只關(guān)注批處理任務(wù)相關(guān)的問題礁竞,如事務(wù)糖荒、并發(fā)、監(jiān)控模捂、執(zhí)行等捶朵,并不提供相應(yīng)的調(diào)度功能。因此狂男,如果我們希望批處理任務(wù)定期執(zhí)行综看,可結(jié)合 Quartz 等成熟的調(diào)度框架實(shí)現(xiàn)。

1.2.1 Spring Batch架構(gòu)

Spring Batch核心架構(gòu)分為三層:應(yīng)用層岖食,核心層红碑,基礎(chǔ)結(jié)構(gòu)層

Spring Batch三層核心架構(gòu)

應(yīng)用層包含所有的批處理作業(yè),通過Spring框架管理程序員自定義的代碼泡垃。核心層包含Spring Batch啟動和控制所需要的核心類析珊,如:JobLauncher羡鸥、Job和step等。應(yīng)用層和核心層建立在基礎(chǔ)架構(gòu)層之上唾琼,基礎(chǔ)架構(gòu)層提供通用的讀(ItemReader)兄春、寫(ItemWriter)和服務(wù)處理。

Spring Batch的三層體系架構(gòu)使得Spring Batch框架在不同的層級進(jìn)行擴(kuò)展锡溯,避免不同層級間的影響赶舆。

1.3 Spring Batch 2.0新特性

· 支持java5;
· 非順序的Step支持祭饭;
· 面向Chunk處理芜茵;
· 強(qiáng)化元數(shù)據(jù)訪問;
· 增強(qiáng)擴(kuò)展性倡蝙;
· 可配置九串;

1.3.1 支持非順序的Step

Spring Batch 2.0支持條件判斷執(zhí)行Step的方式。在2.0版本之前寺鸥,僅支持順序執(zhí)行Step:

下面代碼中展示了如何配置條件Step:

1.3.2 面向Chunk處理

Spring Batch 1.X版本對數(shù)據(jù)處理默認(rèn)提供的策略是面向Item處理:

在面向Item處理中猪钮,ItemReader會返回一個對象(即Item)給ItemWriter進(jìn)行處理,Item的數(shù)據(jù)為提交間隔的要求時提交計(jì)算結(jié)果胆建。例如烤低,如果提交所要求得Item數(shù)量為3時,ItemReader和ItemWriter分別會被調(diào)用3次:

對應(yīng)的ItemReader和ItemWriter為了實(shí)現(xiàn)回滾的場景笆载,需要在內(nèi)部定義復(fù)雜的方法(如mark標(biāo)記方法扑馁,reset恢復(fù)方法,clear清除方法等)凉驻。接口ItemReader和ItemWriter在Spring Batch 1.X版本的實(shí)現(xiàn)代碼為:

由于處理的范圍是一個Item腻要,如果要支持回滾場景就需要額外的方法,此時mark涝登,reset雄家,flush,和clear就派上了用場胀滚。如趟济,在成功讀/寫了2個item之后,在寫第三個item時發(fā)生了錯誤蛛淋,整個事物就需要回滾咙好,writer中的clear方法會被調(diào)用,用于清空緩存褐荷,ItemReader中的reset被調(diào)用勾效,用于把mark方法所指向的數(shù)據(jù)游標(biāo)復(fù)原。

Spring Batch 2.0中支持面向Chunk的操作,簡化了ItemReader和ItemWriter接口的復(fù)雜度层宫。面向Chunk的操作序列圖如下:

按照面向Chunk的操作杨伙,如果提交間隔是3次,那么讀操作被調(diào)用3次萌腿,寫操作被調(diào)用1次限匣。讀Item被匯總到列表中,最終被統(tǒng)一寫出:

面向Chunk的方案不僅更加簡單更有擴(kuò)展性毁菱,同時也讓ItemReader和ItemWriter接口更加簡潔米死。接口ItemReader和ItemWriter在Spring Batch 2.X版本的實(shí)現(xiàn)參見代碼:

如代碼所示,ItemReader和ItemWriter接口不再包含mark贮庞,reset峦筒,flush,和clear方法窗慎,使得讀和寫對象的創(chuàng)建更加直接物喷。ItemReader例子中,接口非常簡單遮斥,框架會為開發(fā)者把讀取的item緩存起來峦失,以防止rollback情況的放生。ItemWriter也很簡單术吗,不再是一次一個item的拿取尉辑,而是一次把整個item塊都拿到,把控制權(quán)交給step前決定資源的寫入藐翎。

1.3.3 增加ItemProcessor

在Spring Batch 2.0 之前材蹬,Step只依賴ItemReader和ItemWriter实幕,在SpringBatch 2.0 中引入了ItemProcessor(負(fù)責(zé)業(yè)務(wù)數(shù)據(jù)的處理)吝镣。

通常的業(yè)務(wù)場景需要在數(shù)據(jù)寫入之前,對數(shù)據(jù)進(jìn)行處理昆庇,在Spring Batch 1.X版本中末贾,可以使用組合模式,通過在讀/寫之間加入ItemTransformer這一層來實(shí)現(xiàn):

Spring Batch 2.0 版本之后的Step整吆,將ItemTransformer重新命名為ItemProcessor拱撵,和ItemReader與ItemWriter提升為相同的層級:

1.4 開發(fā)環(huán)境搭建

下載RELEASE 2.2.1版本(http://static.springsource.org/downloads/nightly/release-download.php?project=BATCH)(BATCH/spring-batch-2.2.1.RELEASE-no-dependencies.zip)。

下載后直接解壓:
· dist:編譯好的jar和源文件壓縮包表蝙;
· samples:示例工程拴测,需要maven構(gòu)建項(xiàng)目;

因此為了編譯samples項(xiàng)目府蛇,需要安裝Maven集索。

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子务荆,更是在濱河造成了極大的恐慌妆距,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件函匕,死亡現(xiàn)場離奇詭異娱据,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)盅惜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門中剩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人抒寂,你說我怎么就攤上這事咽安。” “怎么了蓬推?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵妆棒,是天一觀的道長。 經(jīng)常有香客問我沸伏,道長糕珊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任毅糟,我火速辦了婚禮红选,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姆另。我一直安慰自己喇肋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布迹辐。 她就那樣靜靜地躺著蝶防,像睡著了一般。 火紅的嫁衣襯著肌膚如雪明吩。 梳的紋絲不亂的頭發(fā)上间学,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機(jī)與錄音印荔,去河邊找鬼低葫。 笑死,一個胖子當(dāng)著我的面吹牛仍律,可吹牛的內(nèi)容都是我干的嘿悬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼水泉,長吁一口氣:“原來是場噩夢啊……” “哼善涨!你這毒婦竟也來了主到?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤躯概,失蹤者是張志新(化名)和其女友劉穎登钥,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體娶靡,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牧牢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了姿锭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片塔鳍。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖呻此,靈堂內(nèi)的尸體忽然破棺而出轮纫,到底是詐尸還是另有隱情,我是刑警寧澤焚鲜,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布掌唾,位于F島的核電站,受9級特大地震影響忿磅,放射性物質(zhì)發(fā)生泄漏糯彬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一葱她、第九天 我趴在偏房一處隱蔽的房頂上張望撩扒。 院中可真熱鬧,春花似錦吨些、人聲如沸搓谆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泉手。三九已至,卻和暖如春但校,著一層夾襖步出監(jiān)牢的瞬間螃诅,已是汗流浹背啡氢。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工状囱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人倘是。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓亭枷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親搀崭。 傳聞我的和親對象是個殘疾皇子叨粘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

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