Spring Batch架構
以下是Spring Batch體系結構的圖示。 如圖中所示,該體系結構包含三個主要組件,即應用程序(Application),批覈(Batch Core)和批處理基礎架構(Batch Infrastructure)。
- 應用程序 - 此組件包含所有作業和使用Spring Batch框架編寫的代碼。
- 批覈 - 該組件包含控制和啓動批作業所需的所有API類。
- 批處理基礎結構 - 此組件包含應用程序和批處理核心組件使用的讀取器,寫入器和服務。
Spring Batch的組件
下圖顯示了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數據庫讀取數據並處理它並將其寫入文件(平面),那麼使用的步驟如下 -
- 從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
是執行作業/步驟的代表。 它們包含作業/步驟的運行信息,例如(作業/步驟)的開始時間,(作業/步驟的)結束時間。