Spring Batch - 架構



以下是 Spring Batch 架構的圖示。如圖所示,該架構包含三個主要元件,即 **應用程式、批處理核心** 和 **批處理基礎設施**。

Architecture

**應用程式** - 此元件包含所有作業以及我們使用 Spring Batch 框架編寫的程式碼。

**批處理核心** - 此元件包含控制和啟動批處理作業所需的所有 API 類。

**批處理基礎設施** - 此元件包含應用程式和批處理核心元件使用的讀取器、寫入器和服務。

Spring Batch 的元件

下圖顯示了 Spring Batch 的不同元件以及它們是如何相互連線的。

Components

作業

在 Spring Batch 應用程式中,作業是要執行的批處理過程。它從頭到尾執行,不會中斷。此作業進一步細分為步驟(或作業包含步驟)。

我們將在 Spring Batch 中使用 XML 檔案或 Java 類配置作業。以下是 Spring Batch 中作業的 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 應用程式寫入特定目標。

**項處理器** 是一個包含處理程式碼的類,該程式碼處理讀取到 Spring Batch 中的資料。如果應用程式讀取 **“n”** 條記錄,則處理器中的程式碼將在每條記錄上執行。

當沒有給出讀取器和寫入器時,**任務** 充當 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 中的 Job 儲存庫為 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 的域物件,您可以配置作業儲存庫的記憶體版本,如下所示。

<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

**JobInstance** 表示作業的邏輯執行;當我們執行作業時,它會被建立。每個作業例項都透過作業的名稱和執行時傳遞給它的引數來區分。

如果 JobInstance 執行失敗,則可以再次執行相同的 JobInstance。因此,每個 JobInstance 可以有多個作業執行。

JobExecution 和 StepExecution

JobExecution 和 StepExecution 是作業/步驟執行的表示。它們包含作業/步驟的執行資訊,例如開始時間(作業/步驟)、結束時間(作業/步驟)。

廣告

© . All rights reserved.