日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBatch批处理框架入门(二)

發布時間:2025/1/21 javascript 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBatch批处理框架入门(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章接上一篇SpringBatch批處理框架入門(一),繼續講解SpringBatch基礎知識。

目錄

SpringBatch 核心類介紹

?SpringBatch 核心類Job

?SpringBatch 核心類Step

?SpringBatch 核心類StepExecution

?SpringBatch 核心類ExecutionContext

?SpringBatch 核心類JobRepository

?SpringBatch 核心類JobLauncher

?SpringBatch 核心類ItemReader和ItemWriter

?SpringBatch 核心類ItemProcessor?

?SpringBatch 核心類Chunk

?SpringBatch 監聽器

?SpringBatch具體小例子(部分代碼)


?

SpringBatch 核心類介紹

下圖是我們要講解spring batch幾個核心類:

?SpringBatch 核心類Job

Job是封裝整個批處理過程的一個概念。Jobspring batch的體系當中是一個最頂層的抽象概念。

一個job是我們運行的基本單位,它內部由step組成。job本質上可以看成step的一個容器。一個job可以按照指定的邏輯順序組合step,并提供了我們給所有step設置相同屬性的方法,例如一些事件監聽,跳過策略

Spring BatchSimpleJob類的形式提供了Job接口的默認簡單實現,它在Job之上創建了一些標準功能。一個使用java bean例子代碼如下

@Beanpublic Job cafeCatJob() {return jobBuilderFactory.get("cafeCatJob").start(cafeCatStep()).build();}

SpringBatch 核心類Step

帶有步驟的作業層次結構

?SpringBatch 核心類StepExecution

StepExecution表示一次執行Step,?每次運行一個Step時都會創建一個新的StepExecution,類似于JobExecution。 但是,某個步驟可能由于其之前的步驟失敗而無法執行。 且僅當Step實際啟動時才會創建StepExecution

次step執行的實例由StepExecution類的對象表示。 每個StepExecution都包含對其相應步驟的引用以及JobExecution和事務相關的數據,例如提交和回滾計數以及開始和結束時間。 此外,每個步驟執行都包含一個ExecutionContext,其中包含開發人員需要在批處理運行中保留的任何數據,例如重新啟動所需的統計信息或狀態信息。

下面是一個從數據庫當中截圖的實例:

SpringBatch 核心類ExecutionContext

ExecutionContext即每一JobExecution和StepExecution 的執行環境。它包含一系列的鍵值對。我們可以用如下代碼獲取ExecutionContext

  • ExecutionContext stepContext= stepExecution.getExecutionContext();
  • ExecutionContext jobContext = jobExecution.getExecutionContext();

SpringBatch 核心類JobRepository

JobRepository是一個用于將上述job,step等概念進行持久化的一個類。 它同時給Job和Step以及下文會提到的JobLauncher實現提供CRUD操作。 首次啟動Job時,將從repository中獲取JobExecution,并且在執行批處理的過程中,StepExecution和JobExecution將被存儲到repository當中

@EnableBatchProcessing注解可以為JobRepository提供自動配置。

SpringBatch 核心類JobLauncher

JobLauncher這個接口的功能非常簡單,它是用于啟動指定了JobParametersJob,為什么這里要強調指定了JobParameter,原因其實我們在前面已經提到了,jobparameterjob一起才能組成一次job的執行。

SpringBatch 核心類ItemReader和ItemWriter

ItemReader是一個讀數據的接口, ItemReader讀完所有數據時,返回null表示后續操作數據已經讀完。Spring Batch為ItemReader提供了非常多的實現類。

ItemWriter是一個寫數據的接口,Spring BatchItemWriter提供了非常多的實現類。

  • 操作單個文件:FlatFileItemReaderFlatFileItemWriter
  • 操作多個文件:MultiResourceItemReader MultiResourceItemWriter
  • 操作數據庫:JdbcPagingItemReader JdbcBatchItemWriter

? ??????? MyBatisPagingItemReader MyBatisBatchItemWriter

  • 操作XML文件:StaxEventItemReader StaxEventItemWriter
  • 操作JSON文件:JsonItemReader JsonFileItemWriter

SpringBatch 核心類ItemProcessor?

ItemProcessor對項目的業務邏輯處理的一個抽象,?當ItemReader讀取到一條記錄之后,ItemWriter還未寫入這條記錄之前,I我們可以借助temProcessor提供一個處理業務邏輯的功能,并對數據進行相應操作。如果我們在ItemProcessor發現一條數據不應該被寫入,可以通過返回null來表示。

SpringBatch 核心類Chunk

chunk處理流程如右圖

一次batch的任務可能會有很多的數據讀寫操作,因此一條一條的處理并向數據庫提交的話效率不會很高,因此spring batch提供了chunk這個概念,我們可以設定一個chunk size,spring batch 將一條一條處理數據,但不提交到數據庫,只有當處理的數據數量達到chunk size設定的值得時候,才一起去commit。

?SpringBatch 監聽器

Spring Batch提供了多種監聽器Listener,用于在任務處理過程中觸發我們的邏輯代碼。常用的監聽器根據粒度從粗到細分別有:Job級別的監聽器JobExecutionListener、Step級別的監聽器StepExecutionListener、Chunk監聽器ChunkListener、ItemReader監聽器ItemReadListener、ItemWriter監聽器ItemWriteListener和ItemProcessor監聽器ItemProcessListener和SkipListener等。具體可以參考下表

監聽器

具體說明

JobExecutionListener

Job開始之前(beforeJob)和之后(aflerJob)觸發

StepExecutionListener

Step開始之前(beforeStep)和之后(afterStep)觸發

ChunkListener

Chunk 開始之前(beforeChunk),之后(afterChunk)和錯誤后(afterChunkError)觸發

ItemReadListener

Read 開始之前(beforeRead),之后(afterRead)和錯誤后(onReadError)觸發

ItemProcessListener

Processor 開始之前(beforeProcess),之后(afterProcess)和錯誤后(onProcessError)觸發

ItemWriteListener

Writer 開始之前(beforeWrite),之后(afterWrite)和錯誤后(onWriteError)觸發

SkipListener

Skip(reder)時候,Skip(writer)時候,在 Skip(processor)時候

?SpringBatch具體小例子(部分代碼)

@Configuration @EnableBatchProcessing public class CafeCatConfiguration {@Autowiredprivate JobBuilderFactory jobBuilderFactory;@Autowiredprivate StepBuilderFactory stepBuilderFactory;@Autowiredprivate CatProcessor catProcessor;@Autowiredprivate SqlSessionFactory sqlSessionFactory;@Beanpublic Job cafeCatJob() {return jobBuilderFactory.get("cafeCatJob").start(cafeCatStep()).build();}@Beanpublic Step cafeCatStep() {return stepBuilderFactory.get("cafeCatStep").<CafeCat, Cat>chunk(10).reader(cafeCatCommonFileItemReader()).processor(catProcessor).writer(catCommonMybatisItemWriter()).build();}@Bean@StepScopepublic CommonFileItemReader<CafeCat> cafeCatCommonFileItemReader() {return new CommonFileItemReader<>(CafeCat.class);}@Bean@StepScopepublic CommonMybatisItemWriter<Cat> catCommonMybatisItemWriter() {return new CommonMybatisItemWriter<>(sqlSessionFactory,Cat.class.getSimpleName());} }

詳細代碼請參考GitHub上面:SpringBatch例子詳細代碼

總結

以上是生活随笔為你收集整理的SpringBatch批处理框架入门(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。