<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      小雞炸

      導(dǎo)航

      批量單元框架SpringBatch簡(jiǎn)介

      SpringBatch簡(jiǎn)介

      Spring Batch是一個(gè)輕量級(jí)的、完善的批處理框架,作為Spring體系中的一員,它擁有靈活、方便、生產(chǎn)可用的特點(diǎn)。在應(yīng)對(duì)高效處理大量信息、定時(shí)處理大量數(shù)據(jù)等場(chǎng)景十分簡(jiǎn)便。結(jié)合調(diào)度框架能更大地發(fā)揮Spring Batch的作用。

      一、Spring Batch的概念知識(shí)

       

      1.1、分層架構(gòu)

       

      Spring Batch的分層架構(gòu)圖如下:

       

       

       

      可以看到它分為三層,分別是:

       

          Application應(yīng)用層:包含了所有任務(wù)batch jobs和開發(fā)人員自定義的代碼,主要是根據(jù)項(xiàng)目需要開發(fā)的業(yè)務(wù)流程等。

       

          Batch Core核心層:包含啟動(dòng)和管理任務(wù)的運(yùn)行環(huán)境類,如JobLauncher等。

       

          Batch Infrastructure基礎(chǔ)層:上面兩層是建立在基礎(chǔ)層之上的,包含基礎(chǔ)的讀入reader和寫出writer、重試框架等。

      1.2、關(guān)鍵概念

       

      理解下圖所涉及的概念至關(guān)重要,不然很難進(jìn)行后續(xù)開發(fā)和問(wèn)題分析。

       

       

       

      1.2.1、JobRepository

       

      專門負(fù)責(zé)與數(shù)據(jù)庫(kù)打交道,對(duì)整個(gè)批處理的新增、更新、執(zhí)行進(jìn)行記錄。所以Spring Batch是需要依賴數(shù)據(jù)庫(kù)來(lái)管理的。

       

      1.2.2、任務(wù)啟動(dòng)器JobLauncher

       

      負(fù)責(zé)啟動(dòng)任務(wù)Job。

       

      1.2.3、任務(wù)Job

       

      Job是封裝整個(gè)批處理過(guò)程的單位,跑一個(gè)批處理任務(wù),就是跑一個(gè)Job所定義的內(nèi)容。

       

      11

       

       

       

      上圖介紹了Job的一些相關(guān)概念:

       

          Job:封裝處理實(shí)體,定義過(guò)程邏輯。

       

          JobInstance:Job的運(yùn)行實(shí)例,不同的實(shí)例,參數(shù)不同,所以定義好一個(gè)Job后可以通過(guò)不同參數(shù)運(yùn)行多次。

       

          JobParameters:與JobInstance相關(guān)聯(lián)的參數(shù)。

       

          JobExecution:代表Job的一次實(shí)際執(zhí)行,可能成功、可能失敗。

       

      所以,開發(fā)人員要做的事情,就是定義Job。

       

      1.2.4、步驟Step

       

      Step是對(duì)Job某個(gè)過(guò)程的封裝,一個(gè)Job可以包含一個(gè)或多個(gè)Step,一步步的Step按特定邏輯執(zhí)行,才代表Job執(zhí)行完成。

       

       

       

      通過(guò)定義Step來(lái)組裝Job可以更靈活地實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯。

       

      1.2.5、輸入——處理——輸出

       

      所以,定義一個(gè)Job關(guān)鍵是定義好一個(gè)或多個(gè)Step,然后把它們組裝好即可。而定義Step有多種方法,但有一種常用的模型就是輸入——處理——輸出,即Item Reader、Item Processor和Item Writer。比如通過(guò)Item Reader從文件輸入數(shù)據(jù),然后通過(guò)Item Processor進(jìn)行業(yè)務(wù)處理和數(shù)據(jù)轉(zhuǎn)換,最后通過(guò)Item Writer寫到數(shù)據(jù)庫(kù)中去。

       

      Spring Batch為我們提供了許多開箱即用的Reader和Writer,非常方便。

       

      二、代碼實(shí)例

       

      理解了基本概念后,就直接通過(guò)代碼來(lái)感受一下吧。整個(gè)項(xiàng)目的功能是從多個(gè)csv文件中讀數(shù)據(jù),處理后輸出到一個(gè)csv文件。

       

      2.1、基本框架

       

      添加依賴:

       

       

       

      需要添加Spring Batch的依賴,同時(shí)使用H2作為內(nèi)存數(shù)據(jù)庫(kù)比較方便,實(shí)際生產(chǎn)肯定是要使用外部的數(shù)據(jù)庫(kù),如Oracle、PostgreSQL。

       

      入口主類:

       

       

       

      也很簡(jiǎn)單,只是在Springboot的基礎(chǔ)上添加注解@EnableBatchProcessing。

       

      領(lǐng)域?qū)嶓w類Employee:

       

       

       

      對(duì)應(yīng)的csv文件內(nèi)容如下:

       

      id,firstName,lastName

      1,Lokesh,Gupta

      2,Amit,Mishra

      3,Pankaj,Kumar

      4,David,Miller


       

      2.2、輸入——處理——輸出

       

      2.2.1、讀取ItemReader

       

      因?yàn)橛卸鄠€(gè)輸入文件,所以定義如下:

       

       

       

       

       

       

       

       

       

       

      這里使用了FlatFileItemReader,方便我們從文件讀取數(shù)據(jù)。

       

      2.2.2、處理ItemProcessor

       

      為了簡(jiǎn)單演示,處理很簡(jiǎn)單,就是把最后一列轉(zhuǎn)為大寫:

       

       

       

       

       

      2.2.3、輸出ItremWriter

       

      比較簡(jiǎn)單,代碼及注釋如下:

       

       

       

       

       

       

      2.3、Step

       

      有了Reader-Processor-Writer后,就可以定義Step了:

       

       

       

      這里有一個(gè)chunk的設(shè)置,值為5,意思是5條記錄后再提交輸出,可以根據(jù)自己需求定義。

       

      2.4、Job

       

      完成了Step的編碼,定義Job就容易了:

       

      2.5、運(yùn)行

       

      完成以上編碼后,執(zhí)行程序,結(jié)果如下:

       

       

       

       

       

       

      成功讀取數(shù)據(jù),并將最后字段轉(zhuǎn)為大寫,并輸出到outputData.csv文件。

       

      三、監(jiān)聽Listener

       

      可以通過(guò)Listener接口對(duì)特定事件進(jìn)行監(jiān)聽,以實(shí)現(xiàn)更多業(yè)務(wù)功能。比如如果處理失敗,就記錄一條失敗日志;處理完成,就通知下游拿數(shù)據(jù)等。

       

      我們分別對(duì)Read、Process和Write事件進(jìn)行監(jiān)聽,對(duì)應(yīng)分別要實(shí)現(xiàn)ItemReadListener接口、ItemProcessListener接口和ItemWriteListener接口。因?yàn)榇a比較簡(jiǎn)單,就是打印一下日志,這里只貼出ItemWriteListener的實(shí)現(xiàn)代碼:

       

       

       

      把實(shí)現(xiàn)的監(jiān)聽器listener整合到Step中去:

       

       

       

      執(zhí)行后看一下日志:

       

       

       

      這里就能明顯看到之前設(shè)置的chunk的作用了。Writer每次是處理5條記錄,如果一條輸出一次,會(huì)對(duì)IO造成壓力

      ————————————————

      原文鏈接:https://blog.csdn.net/jackssybin/article/details/124957443

      posted on 2022-12-08 20:18  小雞炸  閱讀(344)  評(píng)論(0)    收藏  舉報(bào)

      主站蜘蛛池模板: 人妻在线中文字幕| 国产免费又黄又爽又色毛| 国产高清一区二区三区视频| 亚洲国产一区二区在线| 湖北省| 精品乱人伦一区二区三区| 精品国产乱一区二区三区| 黑人巨大av无码专区| 国产精品二区中文字幕 | 久久综合色最新久久综合色| 强奷漂亮少妇高潮伦理| 国产l精品国产亚洲区| 欧美xxxx精品另类| 亚欧洲乱码视频一二三区| 婷婷丁香五月深爱憿情网| 污网站在线观看视频| 国产成人黄色自拍小视频| 亚洲精品国产一区二区在线观看| 制服 丝袜 亚洲 中文 综合| 色综合AV综合无码综合网站| 日本一区二区三区免费播放视频站| 男人下部进女人下部视频| 国产一区二区在线激情往| 国模在线视频一区二区三区 | 欧美日本一区二区视频在线观看| 亚洲av免费看一区二区| 人人妻人人狠人人爽| 久久国产精品老人性| 综合人妻久久一区二区精品| 成人国产精品免费网站| 国产精品无码不卡在线播放| 国产精品人妇一区二区三区| 97人人添人澡人人爽超碰| 午夜福利理论片高清在线| 亚洲av激情五月性综合| 制服丝袜长腿无码专区第一页 | 国产精品大全中文字幕| 久久精品国产亚洲av麻豆小说 | 日韩中文字幕v亚洲中文字幕| 国产成人高清亚洲一区91| 国产精品成人免费视频网站京东|