- Spring Batch 教程
- Spring Batch - 首頁
- Spring Batch - 概述
- Spring Batch - 環境
- Spring Batch - 架構
- Spring Batch - 應用
- Spring Batch - 配置
- 讀取器、寫入器和處理器
- Spring Batch - 基礎應用
- Spring Batch - XML 到 MySQL
- Spring Batch - CSV 到 XML
- Spring Batch - MySQL 到 XML
- Spring Batch - MySQL 到平面檔案
- Spring Batch 有用資源
- Spring Batch - 快速指南
- Spring Batch - 有用資源
- Spring Batch - 討論
Spring Batch - 架構
以下是 Spring Batch 架構的圖示。如圖所示,該架構包含三個主要元件,即 **應用程式、批處理核心** 和 **批處理基礎設施**。
**應用程式** - 此元件包含所有作業以及我們使用 Spring Batch 框架編寫的程式碼。
**批處理核心** - 此元件包含控制和啟動批處理作業所需的所有 API 類。
**批處理基礎設施** - 此元件包含應用程式和批處理核心元件使用的讀取器、寫入器和服務。
Spring Batch 的元件
下圖顯示了 Spring Batch 的不同元件以及它們是如何相互連線的。
作業
在 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 是作業/步驟執行的表示。它們包含作業/步驟的執行資訊,例如開始時間(作業/步驟)、結束時間(作業/步驟)。