spring batch (一) 常見的基本的概念介紹


 SpringBatch的基本概念介紹

內容來自《Spring Batch 批處理框架》,作者:劉相。

一、配置文件

  在項目中使用spring batch 需要在配置文件中聲明:

    事務管理器:ResourceTransactionManager

    任務倉庫:MapJobRepositoryFactoryBean

    任務加載器:SimpleJobLauncher(作業調度器)

二、基本介紹

  在spring batch 中一個任務Job由 一個或者多個步驟Step組成,一個步驟Step由讀操作Reader、處理操作Procesor、寫操作Writer組成。JobLauncher是任務啟動器,可以看作是程序的入口。

三、spring batch 主要對象

 
對象                    描述 
Job 作業。批處理中的核心概念,是Batch操作的基礎單元 
JobInstance 作業實例。每個作業執行時,都會生成一個實例,實例會被存放在JobRepository中,如果作業失敗,下次重新執行該作業時,會使用同一個作業實例。對於Job和JobInstance的關系,可以理解為Java中類和實例對象的關系。 
JobParameters 作業參數。它是一組用來啟動批處理任務的參數,在啟動Job的時候,可以設置任何需要的作業參數。需要注意的是作業參數會用來標識作業實例,即不同的Job實例是通過Job參數的來區分的。 
JobExecution 作業執行器。負責具有Job的執行,每次運行Job都回啟動一個新的Job執行器。 
JobRepository 作業倉庫。主要負責存儲作業執行過程中的狀態數據和結果。為JobLauncher、Job、Step提供標准的CRUD實現。 
JobLauncher 作業調度器(任務啟動器)。它根據給定的JobParameters執行作業。 
Step 作業步(操作步)。Job的一個執行環節,多個或者一個Step組成Job,封裝了批處理任務中的一個獨立的連續階段。 
StepExecution 作業步執行器。負責具體Step的執行。每次運行Step都會啟動一個新的執行器。 
Tasklet 

Tasklet。step中具體執行邏輯的操作。可以重復執行。可以設置具體的同步、異步操作等。 

ExecutionContext 執行上下文。它是一組框架持久化與控制的key/value對,能夠讓開發者在StepExecution或JobExecution范疇保存需要進行持久化的狀態。 
Item 條目。一條數據記錄。 
Chunk Item集合。它是給定數量Item的集合。可以定義對讀操作、處理操作、寫操作,提交間隔等。 
ItemReader 條目讀(讀操作)。表示Step讀取數據,一次讀取一條數據。 
ItemProcessor 條目處理(處理操作)。用於表示Item的業務處理。 
ItemWriter 條目寫(寫操作)。用於表示Step輸出數據,一次輸出一條。 

 

四、對象介紹

  1.Job

   批處理作業Job是由一組Step組成的,同時也是作業配置文件的頂層的元素。一般每個跑批Job都會有一個配置文件,在配置文件中配置Job的內容。如:每個Job都有自己唯一的id(名字),定義Step的執行順序,定義作業是否可以重啟等 。

   Job執行的時候會生成一個Job Instance(作業實例),Job Instance包含執行Job期間產生的數據以及Job的執行狀態信息等。Job Instance是通過Job Name(作業名稱)和Job Parameters(作業參數)來區分的。每次Job執行的時候都會有一個Job Execution(作業執行器),Job Execution負責具體Job的執行。

    一個Job可能有一個或多個Job Instance。

    一個Job Instance可能有一個或多個Job Execution。(如果不理解往下看)

  2.Job Instance 

    Job Instance(作業實例)是一個運行期概念,Job每次執行都會涉及一個Job Instance。

    Job Instance來源有兩種可能:一種是根據設置的Job Parameters從Job Repository(作業倉庫)中獲取,第二中是如果根據設置的Job Parameters沒有從Job Repository中獲取到,則新創建一個Job Instance。

  3.Job Parameters

    一個Job通過Job Parameters來區分不同的Job Instance。如果同一個Job,Job Name一樣的話,則Job Parameters肯定不一樣,但是對於不同的Job來說,允許有相同的Job Parameters。也就是說Job Instance = Job Name + Job Parameters。

    Job Parameters共支持四種類型的參數:String、Date、Long、Double。同時Spring Batch框架提供了通過JobParametersBuilder來構建參數,如下: 

    

    也可以查看相應的數據庫表:BATCH_JOB_EXECUTION_PARAMS。

    如果Job Name 和 Job Parameters 都相同的情況下執行Job 則會報異常。

  4.Job Execution

     Job Execution表示Job執行的句柄。一次Job的執行可能成功也可能失敗,只有Job Execution執行成功時才會生成相應的Job Instance。這就是為什么一個Job Instance對應一個或多個Job Execution。

    Job Execution對應的數據庫是:BATCH_JOB_EXECUTION

    Job Execution對應的Java類是:org.springframework.batch.core.JobExecution。

    JobExecution主要的屬性和表的字段差不多,其中屬性中executionContext是:包含運行過程中所有需要被持久化的用戶數據。

  5.Step

     Step表示作業中一個完整的步驟,一個Job可以有一個或多個Step,Step包含一個實際運行的批處理任務中的所有必須處理的信息。一個Step可以有一個或多個Step Execution。當一個Job由多個Step組成時,每個Step執行都會生成一個新的Step Execution,則一個Job Execution就會擁有多個Step Execution。

    比如reader、processor、writer是一個Step,合並文件是一個Step,創建信號文件是一個Step。

    Step中可以配置tasklet、partition、job、flow等。

   6.Step Execution

     Step Execution是Step執行的句柄。和Job Execution相似。一個Step可以有一個或多個Step Execution。

    Step Execution對應的數據庫是:BATCH_STEP_EXECUTION

    Step Execution對應的Java類是:org.springframework.batch.core.StepExecution。

    Step執行的過程是由StepExecution類的對象所表示的,包括每次執行對應的step、Job Execution、相關的事務操作等,此外每次執行step時還包含一個ExecutionContext,用來存放開發者在批處理運行過程中所需要的任何信息。

  7.Execution Context

     Execution Context是Spring Batch框架提供的持久化與控制的key/value對,能夠讓開發者在Step Execution或Job Execution中保存需要進行持久化的狀態。框架會在每次commit后記錄當前的提交記錄數和讀的記錄數,保證繼續從上次失敗的點重新執行。

    Execution Context分為兩類:一類是Job Execution的上下文(對應表:BATCH_JOB_EXECUTION_CONTEXT),另一類是Step Execution的上下文(對應表:BATCH_STEP_EXECUTION_CONTEXT)。兩類上下文之間的關系:一個Job Execution對應一個Job Execution上下文;每個Step Execution對應一個Step Execution 上下文;同一個Job中的Step Execution 共用Job Execution上下文。因此如果同一個Job不同的Step間需要共享數據,則可以從Job Execution的上下文共享數據。

  8.Job Repository

     Spring Batch框架提供Job Repository來存儲Job執行期的元數據(這里的元數據是指:Job Instance、Job Execution、Job Parameters、Step Execution、Execution Context等),並提供兩種默認實現方式。一種是存放在內存中,一種是將元數據存放在數據庫中。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM