Spring Batch架構

以下是Spring Batch體系結構的圖示。 如圖中所示,該體系結構包含三個主要組件,即應用程序(Application),批覈(Batch Core)和批處理基礎架構(Batch Infrastructure)。

Spring Batch架構

  • 應用程序 - 此組件包含所有作業和使用Spring Batch框架編寫的代碼。
  • 批覈 - 該組件包含控制和啓動批作業所需的所有API類。
  • 批處理基礎結構 - 此組件包含應用程序和批處理核心組件使用的讀取器,寫入器和服務。

Spring Batch的組件

下圖顯示了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是執行作業/步驟的代表。 它們包含作業/步驟的運行信息,例如(作業/步驟)的開始時間,(作業/步驟的)結束時間。