アイテムリーダーおよびライターの実装
このセクションでは、前のセクションでまだ説明していないリーダーとライターを紹介します。
デコレーター
場合によっては、ユーザーが既存の ItemReader
に追加される特別な動作が必要です。Spring Batch は、ItemReader
および ItemWriter
の実装に追加の動作を追加できる、すぐに使えるデコレーターを提供します。
Spring Batch には次のデコレーターが含まれます。
SynchronizedItemStreamReader
スレッドセーフではない ItemReader
を使用する場合、Spring Batch は SynchronizedItemStreamReader
デコレータを提供します。これは、ItemReader
スレッドセーフにするために使用できます。Spring Batch は、SynchronizedItemStreamReaderBuilder
を提供して、SynchronizedItemStreamReader
のインスタンスを構築します。
例: FlatFileItemReader
はスレッドセーフではないため、マルチスレッドステップでは使用できません。このリーダーは、マルチスレッドステップで安全に使用できるように、SynchronizedItemStreamReader
で修飾できます。このようなリーダーを装飾する方法の例を次に示します。
@Bean
public SynchronizedItemStreamReader<Person> itemReader() {
FlatFileItemReader<Person> flatFileItemReader = new FlatFileItemReaderBuilder<Person>()
// set reader properties
.build();
return new SynchronizedItemStreamReaderBuilder<Person>()
.delegate(flatFileItemReader)
.build();
}
SingleItemPeekableItemReader
Spring Batch には、ItemReader
にピークメソッドを追加するデコレーターが含まれています。このピークメソッドにより、ユーザーは 1 つ先のアイテムをピークできます。ピークを繰り返し呼び出すと同じアイテムが返され、これが read
メソッドから返される次のアイテムです。Spring Batch は、SingleItemPeekableItemReader
のインスタンスを構築するために SingleItemPeekableItemReaderBuilder
を提供します。
SingleItemPeekableItemReader のピークメソッドは、複数のスレッドでピークを尊重することができないため、スレッドセーフではありません。ピークしたスレッドの 1 つだけが、次の読み取り呼び出しでそのアイテムを取得します。 |
SynchronizedItemStreamWriter
スレッドセーフではない ItemWriter
を使用する場合、Spring Batch は SynchronizedItemStreamWriter
デコレータを提供します。これは、ItemWriter
スレッドセーフにするために使用できます。Spring Batch は、SynchronizedItemStreamWriterBuilder
を提供して、SynchronizedItemStreamWriter
のインスタンスを構築します。
例: FlatFileItemWriter
はスレッドセーフではないため、マルチスレッドステップでは使用できません。このライターは、マルチスレッドステップで安全に使用するために、SynchronizedItemStreamWriter
で装飾できます。このようなライターを装飾する方法の例を次に示します。
@Bean
public SynchronizedItemStreamWriter<Person> itemWriter() {
FlatFileItemWriter<Person> flatFileItemWriter = new FlatFileItemWriterBuilder<Person>()
// set writer properties
.build();
return new SynchronizedItemStreamWriterBuilder<Person>()
.delegate(flatFileItemWriter)
.build();
}
MultiResourceItemWriter
MultiResourceItemWriter
は ResourceAwareItemWriterItemStream
をラップし、現在のリソースに書き込まれたアイテムの数が itemCountLimitPerResource
を超えると、新しい出力リソースを作成します。Spring Batch は、MultiResourceItemWriterBuilder
を提供して、MultiResourceItemWriter
のインスタンスを構築します。
メッセージングリーダーおよびライター
Spring Batch は、一般的に使用されるメッセージングシステム用に次のリーダーとライターを提供します。
AmqpItemReader
AmqpItemReader
は、AmqpTemplate
を使用して交換機からメッセージを受信または変換する ItemReader
です。Spring Batch は、AmqpItemReaderBuilder
を提供して、AmqpItemReader
のインスタンスを構築します。
AmqpItemWriter
AmqpItemWriter
は、AmqpTemplate
を使用して AMQP 交換にメッセージを送信する ItemWriter
です。指定された AmqpTemplate
で名前が指定されていない場合、メッセージは名前のない交換に送信されます。Spring Batch は、AmqpItemWriter
のインスタンスを構築するために AmqpItemWriterBuilder
を提供します。
JmsItemReader
JmsItemReader
は、JmsTemplate
を使用する JMS 用の ItemReader
です。テンプレートには、read()
メソッドにアイテムを提供するために使用されるデフォルトの宛先が必要です。Spring Batch は、JmsItemReader
のインスタンスを構築するために JmsItemReaderBuilder
を提供します。
JmsItemWriter
JmsItemWriter
は、JmsTemplate
を使用する JMS 用の ItemWriter
です。テンプレートには、write(List)
でアイテムを送信するために使用されるデフォルトの宛先が必要です。Spring Batch は、JmsItemWriter
のインスタンスを構築するために JmsItemWriterBuilder
を提供します。
データベースリーダー
Spring Batch は、次のデータベースリーダーを提供します。
Neo4jItemReader
Neo4jItemReader
は、ページング技術を使用してグラフデータベース Neo4j からオブジェクトを読み取る ItemReader
です。Spring Batch は、Neo4jItemReader
のインスタンスを構築する Neo4jItemReaderBuilder
を提供します。
データベースライター
Spring Batch は、次のデータベースライターを提供します。
Neo4jItemWriter
Neo4jItemWriter
は、Neo4j データベースに書き込む ItemWriter
実装です。Spring Batch は、Neo4jItemWriter
のインスタンスを構築する Neo4jItemWriterBuilder
を提供します。
MongoItemWriter
MongoItemWriter
は、Spring Data の MongoOperations
の実装を使用して MongoDB ストアに書き込む ItemWriter
実装です。Spring Batch は、MongoItemWriterBuilder
を提供して、MongoItemWriter
のインスタンスを構築します。
RepositoryItemWriter
RepositoryItemWriter
は、Spring Data からの CrudRepository
の ItemWriter
ラッパーです。Spring Batch は、RepositoryItemWriterBuilder
を提供して、RepositoryItemWriter
のインスタンスを構築します。
専門リーダー
Spring Batch は、次の専門リーダーを提供します。
LdifReader
LdifReader
は、Resource
から LDIF(LDAP Data Interchange Format)レコードを読み取り、解析し、実行された read
ごとに LdapAttribute
オブジェクトを返します。Spring Batch は、LdifReader
のインスタンスを構築するために LdifReaderBuilder
を提供します。