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等),並提供兩種默認實現方式。一種是存放在內存中,一種是將元數據存放在數據庫中。