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

上一篇: Spring Batch配置 下一篇: Spring Batch入門程式