アイテムリーダーおよびライターの実装

このセクションでは、前のセクションでまだ説明していないリーダーとライターを紹介します。

デコレーター

場合によっては、ユーザーが既存の 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 のインスタンスを構築します。

ClassifierCompositeItemWriter

ClassifierCompositeItemWriter は、提供された Classifier によって実装されたルーターパターンに基づいて、各アイテムの ItemWriter 実装のコレクションの 1 つを呼び出します。すべてのデリゲートがスレッドセーフである場合、実装はスレッドセーフです。Spring Batch は、ClassifierCompositeItemWriterBuilder を提供して、ClassifierCompositeItemWriter のインスタンスを構築します。

ClassifierCompositeItemProcessor

ClassifierCompositeItemProcessor は、提供された Classifier を通じて実装されたルーターパターンに基づいて、ItemProcessor 実装のコレクションの 1 つを呼び出す ItemProcessor です。Spring Batch は、ClassifierCompositeItemProcessor のインスタンスを構築するために ClassifierCompositeItemProcessorBuilder を提供します。

メッセージングリーダーおよびライター

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 を提供します。

KafkaItemReader

KafkaItemReader は、Apache Kafka トピックの ItemReader です。同じトピックの複数のパーティションからメッセージを読み取るように構成できます。再起動機能をサポートするために、実行コンテキストにメッセージオフセットを保存します。Spring Batch は、KafkaItemReader のインスタンスを構築するための KafkaItemReaderBuilder を提供します。

KafkaItemWriter

KafkaItemWriter は、KafkaTemplate を使用してデフォルトのトピックにイベントを送信する Apache Kafka 用の ItemWriter です。Spring Batch は、KafkaItemWriter のインスタンスを構築するための KafkaItemWriterBuilder を提供します。

データベースリーダー

Spring Batch は、次のデータベースリーダーを提供します。

Neo4jItemReader

Neo4jItemReader は、ページング技術を使用してグラフデータベース Neo4j からオブジェクトを読み取る ItemReader です。Spring Batch は、Neo4jItemReader のインスタンスを構築する Neo4jItemReaderBuilder を提供します。

MongoItemReader

MongoItemReader は、ページング技術を使用して MongoDB からドキュメントを読み取る ItemReader です。Spring Batch は、MongoItemReader のインスタンスを構築する MongoItemReaderBuilder を提供します。

HibernateCursorItemReader

HibernateCursorItemReader は、Hibernate 上に構築されたデータベースレコードを読み取るための ItemStreamReader です。HQL クエリを実行し、初期化されると、read() メソッドが呼び出されると結果セットを反復処理し、現在の行に対応するオブジェクトを連続して返します。Spring Batch は、HibernateCursorItemReaderBuilder を提供して、HibernateCursorItemReader のインスタンスを構築します。

HibernatePagingItemReader

HibernatePagingItemReader は、Hibernate 上に構築されたデータベースレコードを読み取り、一度に固定数のアイテムのみを読み取るための ItemReader です。Spring Batch は、HibernatePagingItemReader のインスタンスを構築する HibernatePagingItemReaderBuilder を提供します。

RepositoryItemReader

RepositoryItemReader は、PagingAndSortingRepository を使用してレコードを読み取る ItemReader です。Spring Batch は、RepositoryItemReaderBuilder を提供して、RepositoryItemReader のインスタンスを構築します。

データベースライター

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 のインスタンスを構築します。

HibernateItemWriter

HibernateItemWriter は、Hibernate セッションを使用して、現在の Hibernate セッションの一部ではないエンティティを保存または更新する ItemWriter です。Spring Batch は、HibernateItemWriter のインスタンスを構築する HibernateItemWriterBuilder を提供します。

JdbcBatchItemWriter

JdbcBatchItemWriter は、NamedParameterJdbcTemplate のバッチ機能を使用して、提供されたすべてのアイテムに対してステートメントのバッチを実行する ItemWriter です。Spring Batch は、JdbcBatchItemWriterBuilder を提供して、JdbcBatchItemWriter のインスタンスを構築します。

JpaItemWriter

JpaItemWriter は、JPA EntityManagerFactory を使用して永続コンテキストの一部ではないエンティティをマージする ItemWriter です。Spring Batch は、JpaItemWriterBuilder を提供して、JpaItemWriter のインスタンスを構築します。

専門リーダー

Spring Batch は、次の専門リーダーを提供します。

LdifReader

LdifReader は、Resource から LDIF(LDAP Data Interchange Format)レコードを読み取り、解析し、実行された read ごとに LdapAttribute オブジェクトを返します。Spring Batch は、LdifReader のインスタンスを構築するために LdifReaderBuilder を提供します。

MappingLdifReader

MappingLdifReader は、Resource から LDIF(LDAP データ交換形式)レコードを読み取り、解析してから、各 LDIF レコードを POJO(Plain Old Java Object)にマップします。各読み取りは POJO を返します。Spring Batch は、MappingLdifReader のインスタンスを構築する MappingLdifReaderBuilder を提供します。

AvroItemReader

AvroItemReader は、リソースから直列化された Avro データを読み取ります。各読み取りは、Java クラスまたは Avro スキーマで指定された型のインスタンスを返します。リーダーは、Avro スキーマを埋め込むかどうかの入力用にオプションで構成できます。Spring Batch は、AvroItemReaderBuilder を提供して AvroItemReader のインスタンスを構築します。

専門ライター

Spring Batch は、以下の専門ライターを提供しています。

SimpleMailMessageItemWriter

SimpleMailMessageItemWriter は、メールメッセージを送信できる ItemWriter です。メッセージの実際の送信を MailSender のインスタンスに委譲します。Spring Batch は、SimpleMailMessageItemWriterBuilder を提供して、SimpleMailMessageItemWriter のインスタンスを構築します。

AvroItemWriter

AvroItemWrite は、指定された型またはスキーマに従って Java オブジェクトを WriteableResource に直列化します。ライターは、オプションで出力に Avro スキーマを埋め込むように構成することもできます。Spring Batch は、AvroItemWriterBuilder を提供して AvroItemWriter のインスタンスを構築します。

専用プロセッサー

Spring Batch は、次の専用プロセッサーを提供します。

ScriptItemProcessor

ScriptItemProcessor は、指定されたスクリプトに処理する現在のアイテムを渡す ItemProcessor であり、スクリプトの結果はプロセッサーによって返されます。Spring Batch は、ScriptItemProcessor のインスタンスを構築する ScriptItemProcessorBuilder を提供します。