以下是Spring Batch體系結構的圖示。 如圖中所示,該體系結構包含三個主要元件,即應用程式(Application),批核(Batch Core)和批次處理基礎架構(Batch Infrastructure)。
下圖顯示了Spring Batch的不同元件以及它們如何相互連線。
作業
在Spring Batch應用程式中,作業是要執行的批次處理過程。 它從頭至尾無間斷執行。 作業進一步分為幾個步驟(或一個作業包含的步驟)。
我們將使用XML檔案或Java類在Spring Batch中組態作業。 以下是Spring批次處理作業的XML組態。
<job id = "jobid">
<step id = "step1" next = "step2"/>
<step id = "step2" next = "step3"/>
<step id = "step3"/>
</job>
批次處理作業在標記<job> </ job>
中組態。 它有一個名稱為id
的屬性。 在這些標籤中,我們定義了步驟的定義和順序。
可重新啟動 - 通常,當作業正在執行時,我們嘗試再次啟動它,這被認為是重新啟動,並且會重新啟動。 為避免這種情況,您需要將restartable
的值設定為false
,如下所示。
<job id = "jobid" restartable = "false" >
</job>
步驟
步驟是作業的獨立部分,其中包含定義和執行作業(其一部分)的必要資訊。
如圖所示,每個步驟由ItemReader
,ItemProcessor
(可選)和ItemWriter
組成。作業可能包含一個或多個步驟。
讀取器,寫入器和處理者
專案讀取器將資料從特定原始碼讀取到Spring Batch應用程式中,而專案寫入器將資料從Spring Batch應用程式寫入特定目標。
Item處理器是一個包含處理程式碼的類,該程式碼處理讀入spring批次處理的資料。 如果應用程式讀取「n」
個記錄,則處理器中的程式碼將在每條記錄上執行。
當沒有讀取器和寫入器時,有一個tasklet
充當SpringBatch的處理器。 它只處理一個任務。 例如,假設我們正在用一個簡單的步驟來寫一份作業,從MySQL資料庫讀取資料並處理它並將其寫入檔案(平面),那麼使用的步驟如下 -
<job id = "helloWorldJob">
<step id = "step1">
<tasklet>
<chunk reader = "mysqlReader" writer = "fileWriter"
processor = "CustomitemProcessor" ></chunk>
</tasklet>
</step>
</ job>
Spring Batch提供了一長串讀取器和寫入器。 使用這些預定義的類,可以為它們定義bean。 我們將在接下來的章節中更詳細地討論讀取器和寫入器。
JobRepository
Spring Batch中的作業儲存庫為JobLauncher
,Job
和Step
實現提供了建立,檢索,更新和刪除(CRUD)操作。 我們將在XML檔案中定義一個作業儲存庫,如下所示。
<job-repository id = "jobRepository"/>
除id
外,還有更多選項(可選)可用。 以下是包含所有選項及其預設值的作業儲存庫組態。
<job-repository id = "jobRepository"
data-source = "dataSource"
transaction-manager = "transactionManager"
isolation-level-for-create = "SERIALIZABLE"
table-prefix = "BATCH_"
max-varchar-length = "1000"/>
記憶體中儲存庫 - 如果您不想在資料庫中保留Spring Batch的域物件,則可以組態記憶體版本的jobRepository
,如下所示。
<bean id = "jobRepository"
class = "org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean ">
<property name = "transactionManager" ref = "transactionManager"/>
</bean>
JobLauncher
JobLauncher
是一個介面,它使用給定的一組引數啟動Spring Batch作業。 SampleJoblauncher
是實現JobLauncher
介面的類。 以下是JobLauncher
的組態。
<bean id = "jobLauncher"
class = "org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name = "jobRepository" ref = "jobRepository" />
</bean>
JobInstance
JobIinstance
表示作業的邏輯執行; 它是在我們執行作業時建立的。 每個作業範例都由作業的名稱和執行時傳遞給它的引數來區分。
如果JobInstance
執行失敗,則可以再次執行相同的JobInstance
。 因此,每個JobInstance
可以有多個作業執行。
JobExecution和StepExecutionJobExecution
和StepExecution
是執行作業/步驟的代表。 它們包含作業/步驟的執行資訊,例如(作業/步驟)的開始時間,(作業/步驟的)結束時間。