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