Spring Batch讀取器,寫入器和處理器


專案讀取器將資料從特定原始碼讀入Spring批次處理應用程式,而專案寫入器將資料從Spring Batch應用程式寫入特定目標。

Item處理器是一個包含處理程式碼的類,該程式碼處理讀入spring批次處理的資料。 如果應用程式讀取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,flatfile,CSV等各種檔案系統/資料庫的資料。

要在應用程式中包含讀取器,需要為該讀取器定義一個bean,為該bean中的所有必需屬性提供值,並將該bean的id作為值傳遞給chunk元素的readers屬性(或writer屬性)。

ItemReader

它是讀取資料的一個步驟(批次處理過程)的實體。 ItemReader每次讀取一個專案。 Spring Batch提供了一個ItemReader介面。 所有的讀者都實現這個介面。

以下是由Spring Batch提供的一些預定義的ItemReader類,用於從各種源讀取。

讀取器 目的
FlatFIleItemReader 從檔案中讀取資料。
StaxEventItemReader 從XML檔案讀取資料。
StoredProcedureItemReader 從資料庫的儲存過程讀取資料。
JDBCPagingItemReader 從關聯式資料庫中讀取資料。
MongoItemReader 從MongoDB讀取資料。
Neo4jItemReader 從Neo4j讀取資料。

需要通過建立bean來組態ItemReaders。 以下是從XML檔案讀取資料的StaxEventItemReader範例。

<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。 以下是將資料寫入MySQL資料庫的JdbcCursorItemReader範例。

<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>

專案處理器

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; 
   } 
}