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>

步驟
步驟是作業的獨立部分,其中包含定義和執行作業(其一部分)的必要資訊。

如圖所示,每個步驟由ItemReaderItemProcessor(可選)和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中的作業儲存庫為JobLauncherJobStep實現提供了建立,檢索,更新和刪除(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和StepExecution
JobExecutionStepExecution是執行作業/步驟的代表。 它們包含作業/步驟的執行資訊,例如(作業/步驟)的開始時間,(作業/步驟的)結束時間。