Spring-batch-readers-writers-processors
Spring Batch-リーダー、ライター、プロセッサー
- アイテムリーダー*は特定のソースからスプリングバッチアプリケーションにデータを読み込み、*アイテムライター*はスプリングバッチアプリケーションから特定の宛先にデータを書き込みます。
- アイテムプロセッサ*は、スプリングバッチに読み込まれたデータを処理する処理コードを含むクラスです。 アプリケーションがn個のレコードを読み取ると、プロセッサ内のコードが各レコードで実行されます。
チャンク*は *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の属性に値として渡す必要があります。 (*作家*と同じ)。
ItemReader
データを読み取るのは、(バッチプロセスの)ステップのエンティティです。 ItemReaderは、一度に1つのアイテムを読み取ります。 Spring Batchはインターフェース ItemReader を提供します。 すべての*リーダー*がこのインターフェースを実装しています。
以下は、さまざまなソースから読み取るために、Spring Batchが提供する定義済みのItemReaderクラスの一部です。
Reader | Purpose |
---|---|
FlatFIleItemReader | To read data from flat files. |
StaxEventItemReader | To read data from XML files. |
StoredProcedureItemReader | To read data from the stored procedures of a database. |
JDBCPagingItemReader | To read data from relational databases database. |
MongoItemReader | To read data from MongoDB. |
Neo4jItemReader | To read data from Neo4jItemReader. |
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
これは、データを書き込むバッチプロセスの step の要素です。 ItemWriterは、一度に1つのアイテムを書き込みます。 Spring Batchはインターフェース ItemWriter を提供します。 すべてのライターがこのインターフェイスを実装しています。
以下は、Spring Batchがさまざまなソースから読み取るために提供する事前定義済みItemWriterクラスの一部です。
Writer | Purpose |
---|---|
FlatFIleItemWriter | To write data into flat files. |
StaxEventItemWriter | To write data into XML files. |
StoredProcedureItemWriter | To write data into the stored procedures of a database. |
JDBCPagingItemWriter | To write data into relational databases database. |
MongoItemWriter | To write data into MongoDB. |
Neo4jItemWriter | To write data into Neo4j. |
同様に、Beanを作成してItemWriterを構成する必要があります。 以下は、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クラス*- reader および writer が指定されていない場合、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;
}
}