アイテムリーダーおよびライターの実装
このセクションでは、前のセクションでまだ説明していないリーダーとライターを紹介します。
デコレーター
場合によっては、既存の 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 のインスタンスを構築します。
ClassifierCompositeItemWriter
ClassifierCompositeItemWriter は、提供された Classifier によって実装されたルーターパターンに基づいて、各アイテムの ItemWriter 実装のコレクションの 1 つを呼び出します。すべてのデリゲートがスレッドセーフである場合、実装はスレッドセーフです。Spring Batch は、ClassifierCompositeItemWriterBuilder を提供して、ClassifierCompositeItemWriter のインスタンスを構築します。
ClassifierCompositeItemProcessor
ClassifierCompositeItemProcessor は、提供された Classifier を通じて実装されたルーターパターンに基づいて、ItemProcessor 実装のコレクションの 1 つを呼び出す ItemProcessor です。Spring Batch は、ClassifierCompositeItemProcessor のインスタンスを構築するために ClassifierCompositeItemProcessorBuilder を提供します。
MappingItemWriter
MappingItemWriter は、特定の型のアイテムを受け付ける ItemWriter を、書き込み前に各アイテムにマッピング関数を適用することで、別の型のアイテムを受け付ける ItemWriter に適合させます。下流のアイテムライターがスレッドセーフである限り、スレッドセーフは保証され、下流の ItemStream アイテムライターでは状態管理が尊重されます。
このアイテムライターは、CompositeItemWriter と組み合わせて使用すると最も便利です。この場合、下流のライターの前のマッピング関数は、入力アイテムの getter またはより複雑な変換ロジックにすることができ、分解パターンを効果的に許可します。
メッセージングリーダーおよびライター
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 は、次のデータベースリーダーを提供します。
MongoPagingItemReader
MongoPagingItemReader は、ページング技術を使用して MongoDB からドキュメントを読み取る ItemReader です。Spring Batch は、MongoPagingItemReader のインスタンスを構築する MongoPagingItemReaderBuilder を提供します。
データベースライター
Spring Batch は、次のデータベースライターを提供します。
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 を提供します。