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; 
   } 
} 
廣告
© . All rights reserved.