- 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 - 讀取器、寫入器和處理器
專案讀取器 (Item Reader) 從特定來源讀取資料到 Spring Batch 應用,而專案寫入器 (Item Writer) 將資料從 Spring Batch 應用寫入特定目標。
專案處理器 (Item Processor) 是一個包含處理程式碼的類,該程式碼處理讀取到 Spring Batch 中的資料。如果應用讀取 n 條記錄,則處理器中的程式碼將對每條記錄執行。
塊 (Chunk) 是任務 (Tasklet) 的子元素。它用於執行讀取、寫入和處理操作。我們可以在步驟中使用此元素配置讀取器、寫入器和處理器,如下所示。
<batch:job id = "helloWorldJob">
<batch:step id = "step1">
<batch:tasklet>
<batch:chunk reader = "cvsFileItemReader" writer = "xmlItemWriter"
processor = "itemProcessor" commit-interval = "10">
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
Spring Batch 提供讀取器和寫入器,用於從各種檔案系統/資料庫讀取和寫入資料,例如 MongoDB、Neo4j、MySQL、XML、平面檔案、CSV 等。
要在您的應用中包含讀取器,您需要為該讀取器定義一個 bean,為 bean 中的所有必需屬性提供值,並將此 bean 的id作為屬性值傳遞給塊元素的reader(寫入器writer 同理)。
專案讀取器 (ItemReader)
它是步驟(批處理過程的一個步驟)中讀取資料的實體。ItemReader 一次讀取一個專案。Spring Batch 提供了一個介面ItemReader。所有讀取器都實現此介面。
以下是 Spring Batch 提供的一些預定義 ItemReader 類,用於從各種來源讀取資料。
| 讀取器 | 用途 |
|---|---|
| FlatFIleItemReader | 從平面檔案讀取資料。 |
| StaxEventItemReader | 從 XML 檔案讀取資料。 |
| StoredProcedureItemReader | 從資料庫的儲存過程中讀取資料。 |
| JDBCPagingItemReader | 從關係資料庫讀取資料。 |
| MongoItemReader | 從 MongoDB 讀取資料。 |
| Neo4jItemReader | 從 Neo4j 讀取資料。 |
我們需要透過建立 bean 來配置ItemReaders。以下是一個StaxEventItemReader的示例,它從 XML 檔案讀取資料。
<bean id = "mysqlItemWriter"
class = "org.springframework.batch.item.xml.StaxEventItemWriter">
<property name = "resource" value = "file:xml/outputs/userss.xml" />
<property name = "marshaller" ref = "reportMarshaller" />
<property name = "rootTagName" value = "Tutorial" />
</bean>
<bean id = "reportMarshaller"
class = "org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name = "classesToBeBound">
<list>
<value>Tutorial</value>
</list>
</property>
</bean>
如觀察到的,在配置時,我們需要指定所需讀取器的相應類名,並且需要為所有必需的屬性提供值。
專案寫入器 (ItemWriter)
它是批處理過程步驟中寫入資料的元素。ItemWriter 一次寫入一個專案。Spring Batch 提供了一個介面ItemWriter。所有寫入器都實現此介面。
以下是 Spring Batch 提供的一些預定義 ItemWriter 類,用於從各種來源讀取資料。
| 寫入器 | 用途 |
|---|---|
| FlatFIleItemWriter | 將資料寫入平面檔案。 |
| StaxEventItemWriter | 將資料寫入 XML 檔案。 |
| StoredProcedureItemWriter | 將資料寫入資料庫的儲存過程。 |
| JDBCPagingItemWriter | 將資料寫入關係資料庫。 |
| MongoItemWriter | 將資料寫入 MongoDB。 |
| Neo4jItemWriter | 將資料寫入 Neo4j。 |
同樣,我們需要透過建立 bean 來配置 ItemWriters。以下是一個JdbcCursorItemReader的示例,它將資料寫入 MySQL 資料庫。
<bean id = "dbItemReader"
class = "org.springframework.batch.item.database.JdbcCursorItemReader" scope = "step">
<property name = "dataSource" ref = "dataSource" />
<property name = "sql" value = "select * from tutorialsdata" />
<property name = "rowMapper">
<bean class = "TutorialRowMapper" />
</property>
</bean>
專案處理器 (Item Processor)
ItemProcessor:ItemProcessor 用於處理資料。當給定的專案無效時,它返回null,否則它處理給定的專案並返回處理後的結果。介面ItemProcessor<I,O>表示處理器。
Tasklet 類 - 當沒有給出讀取器和寫入器時,Tasklet 充當 SpringBatch 的處理器。它只處理單個任務。
我們可以透過實現包org.springframework.batch.item.ItemProcessor的介面ItemProcessor來定義自定義專案處理器。此 ItemProcessor 類接受一個物件,處理資料並將處理後的資料作為另一個物件返回。
在批處理過程中,如果讀取“n”條記錄或資料元素,則對於每條記錄,它將讀取資料、處理資料並將資料寫入寫入器。為了處理資料,它依賴於傳遞的處理器。
例如,假設您編寫了載入特定 PDF 文件、建立新頁面、以表格格式將資料項寫入 PDF 的程式碼。如果您執行此應用程式,它將從 XML 文件讀取所有資料項,將它們儲存在 MySQL 資料庫中,並在給定的 PDF 文件中逐頁列印它們。
示例
以下是一個示例 ItemProcessor 類。
import org.springframework.batch.item.ItemProcessor;
public class CustomItemProcessor implements ItemProcessor<Tutorial, Tutorial> {
@Override
public Tutorial process(Tutorial item) throws Exception {
System.out.println("Processing..." + item);
return item;
}
}