Spring Batch-リーダー、ライター、プロセッサー

アン Item Reader 特定のソースからSpringBatchアプリケーションにデータを読み込みますが、 Item Writer SpringBatchアプリケーションから特定の宛先にデータを書き込みます。

アン Item processorSpringBatchに読み込まれたデータを処理する処理コードを含むクラスです。アプリケーションがnレコードを読み取ると、プロセッサのコードが各レコードで実行されます。

A 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内の必要なすべてのプロパティに値を指定して、 id チャンク要素の属性への値としてのそのようなBeanの reader (同じ writer)。

ItemReader

これは、データを読み取る(バッチプロセスの)ステップのエンティティです。ItemReaderは、一度に1つのアイテムを読み取ります。SpringBatchはインターフェースを提供しますItemReader。全てのreaders このインターフェースを実装します。

以下は、さまざまなソースから読み取るためにSpringBatchによって提供される事前定義されたItemReaderクラスの一部です。

読者 目的
FlatFIleItemReader フラットファイルからデータを読み取るため。
StaxEventItemReader XMLファイルからデータを読み取るため。
StoredProcedureItemReader データベースのストアドプロシージャからデータを読み取ること。
JDBCPagingItemReader リレーショナルデータベースデータベースからデータを読み取るため。
MongoItemReader MongoDBからデータを読み取るため。
Neo4jItemReader Neo4jItemReaderからデータを読み取るため。

を構成する必要があります 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

それはの要素です stepデータを書き込むバッチプロセスの。ItemWriterは、一度に1つのアイテムを書き込みます。SpringBatchはインターフェースを提供しますItemWriter。すべてのライターがこのインターフェースを実装しています。

以下は、さまざまなソースから読み取るためにSpringBatchによって提供される事前定義されたItemWriterクラスの一部です。

作家 目的
FlatFIleItemWriter フラットファイルにデータを書き込むこと。
StaxEventItemWriter XMLファイルにデータを書き込むこと。
StoredProcedureItemWriter データベースのストアドプロシージャにデータを書き込むこと。
JDBCPagingItemWriter リレーショナルデータベースデータベースにデータを書き込むこと。
MongoItemWriter MongoDBにデータを書き込むため。
Neo4jItemWriter Neo4jにデータを書き込むため。

同様に、Beanを作成してItemWriterを構成する必要があります。以下はの例です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>

アイテムプロセッサ

ItemProcessor:ItemProcessorは、データを処理するために使用されます。指定されたアイテムが無効な場合は、null、それ以外の場合は、指定されたアイテムを処理し、処理された結果を返します。インターフェースItemProcessor<I,O> プロセッサを表します。

Tasklet class −いいえの場合 reader そして writer与えられると、タスクレットはSpringBatchのプロセッサとして機能します。単一のタスクのみを処理します。

インターフェイスを実装することで、カスタムアイテムプロセッサを定義できます ItemProcessor パッケージの org.springframework.batch.item.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; 
   } 
}