Item Reader 和 Writer 實現

在本節中,我們將向您介紹之前章節中尚未討論過的閱讀器和寫入器。

裝飾器

在某些情況下,您可能需要將專用行為附加到現有的 ItemReaderItemWriter 實現。為此,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 添加了一個 peek 方法。此 peek 方法允許使用者提前檢視一個項。重複呼叫 peek 會返回相同的項,這是 read 方法返回的下一個項。Spring Batch 提供了 SingleItemPeekableItemReaderBuilder 來構建 SingleItemPeekableItemReader 的例項。

SingleItemPeekableItemReader 的 peek 方法不是執行緒安全的,因為在多個執行緒中無法遵守 peek。只有其中一個進行了 peek 的執行緒才能在下一次呼叫 read 時獲取該項。

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 實現。如果所有委託都是執行緒安全的,則該實現是執行緒安全的。Spring Batch 提供了 ClassifierCompositeItemWriterBuilder 來構建 ClassifierCompositeItemWriter 的例項。

ClassifierCompositeItemProcessor

ClassifierCompositeItemProcessor 是一個 ItemProcessor,它根據透過提供的 Classifier 實現的路由模式,呼叫集合中的一個 ItemProcessor 實現。Spring Batch 提供了 ClassifierCompositeItemProcessorBuilder 來構建 ClassifierCompositeItemProcessor 的例項。

MappingItemWriter

MappingItemWriter 透過在寫入之前對每個項應用對映函式,將接受給定型別項的 ItemWriter 轉換為接受另一種型別項的寫入器。只要下游項寫入器是執行緒安全的,並且狀態管理透過下游 ItemStream 項寫入器進行,執行緒安全就能得到保證。

此項寫入器與 CompositeItemWriter 結合使用時最有用,其中下游寫入器之前的對映函式可以是輸入項的 getter 或更復雜的轉換邏輯,從而有效地實現解構模式。

訊息閱讀器和寫入器

Spring Batch 為常用的訊息系統提供了以下閱讀器和寫入器:

AmqpItemReader

AmqpItemReader 是一個 ItemReader,它使用 AmqpTemplate 從交換機接收或轉換訊息。Spring Batch 提供了 AmqpItemReaderBuilder 來構建 AmqpItemReader 的例項。

AmqpItemWriter

AmqpItemWriter 是一個 ItemWriter,它使用 AmqpTemplate 將訊息傳送到 AMQP 交換機。如果在提供的 AmqpTemplate 中未指定名稱,則訊息將傳送到匿名交換機。Spring Batch 提供了 AmqpItemWriterBuilder 來構建 AmqpItemWriter 的例項。

JmsItemReader

JmsItemReader 是一個用於 JMS 的 ItemReader,它使用 JmsTemplate。模板應具有預設目標,用於為 read() 方法提供項。Spring Batch 提供了 JmsItemReaderBuilder 來構建 JmsItemReader 的例項。

JmsItemWriter

JmsItemWriter 是一個用於 JMS 的 ItemWriter,它使用 JmsTemplate。模板應具有預設目標,用於在 write(List) 中傳送項。Spring Batch 提供了 JmsItemWriterBuilder 來構建 JmsItemWriter 的例項。

KafkaItemReader

KafkaItemReader 是一個用於 Apache Kafka 主題的 ItemReader。它可以配置為從同一主題的多個分割槽讀取訊息。它將訊息偏移量儲存在執行上下文中以支援重啟功能。Spring Batch 提供了 KafkaItemReaderBuilder 來構建 KafkaItemReader 的例項。

KafkaItemWriter

KafkaItemWriter 是一個用於 Apache Kafka 的 ItemWriter,它使用 KafkaTemplate 將事件傳送到預設主題。Spring Batch 提供了 KafkaItemWriterBuilder 來構建 KafkaItemWriter 的例項。

資料庫閱讀器

Spring Batch 提供了以下資料庫閱讀器:

MongoPagingItemReader

MongoPagingItemReader 是一個 ItemReader,它使用分頁技術從 MongoDB 讀取文件。Spring Batch 提供了 MongoPagingItemReaderBuilder 來構建 MongoPagingItemReader 的例項。

MongoCursorItemReader

MongoCursorItemReader 是一個 ItemReader,它使用流式技術從 MongoDB 讀取文件。Spring Batch 提供了 MongoCursorItemReaderBuilder 來構建 MongoCursorItemReader 的例項。

RepositoryItemReader

RepositoryItemReader 是一個 ItemReader,它使用 PagingAndSortingRepository 讀取記錄。Spring Batch 提供了 RepositoryItemReaderBuilder 來構建 RepositoryItemReader 的例項。

資料庫寫入器

Spring Batch 提供了以下資料庫寫入器:

MongoItemWriter

MongoItemWriter 是一個 ItemWriter 實現,它使用 Spring Data 的 MongoOperations 實現寫入 MongoDB 儲存。Spring Batch 提供了 MongoItemWriterBuilder 來構建 MongoItemWriter 的例項。

RepositoryItemWriter

RepositoryItemWriter 是 Spring Data 中 CrudRepositoryItemWriter 包裝器。Spring Batch 提供了 RepositoryItemWriterBuilder 來構建 RepositoryItemWriter 的例項。

JdbcBatchItemWriter

JdbcBatchItemWriter 是一個 ItemWriter,它使用 NamedParameterJdbcTemplate 的批處理功能為提供的所有項執行一批語句。Spring Batch 提供了 JdbcBatchItemWriterBuilder 來構建 JdbcBatchItemWriter 的例項。

JpaItemWriter

JpaItemWriter 是一個 ItemWriter,它使用 JPA EntityManagerFactory 合併任何不屬於持久化上下文的實體。Spring Batch 提供了 JpaItemWriterBuilder 來構建 JpaItemWriter 的例項。

專用閱讀器

Spring Batch 提供了以下專用閱讀器:

LdifReader

LdifReaderResource 中讀取 LDIF (LDAP 資料交換格式) 記錄,解析它們,併為每次執行的 read 返回一個 LdapAttribute 物件。Spring Batch 提供了 LdifReaderBuilder 來構建 LdifReader 的例項。

MappingLdifReader

MappingLdifReaderResource 中讀取 LDIF (LDAP 資料交換格式) 記錄,解析它們,然後將每個 LDIF 記錄對映到一個 POJO (普通 Java 物件)。每次讀取都返回一個 POJO。Spring Batch 提供了 MappingLdifReaderBuilder 來構建 MappingLdifReader 的例項。

AvroItemReader

AvroItemReader 從 Resource 讀取序列化的 Avro 資料。每次讀取都返回由 Java 類或 Avro Schema 指定的型別例項。閱讀器可以可選地配置為輸入是否嵌入 Avro 模式。Spring Batch 提供了 AvroItemReaderBuilder 來構建 AvroItemReader 的例項。

專用寫入器

Spring Batch 提供了以下專用寫入器:

SimpleMailMessageItemWriter

SimpleMailMessageItemWriter 是一個 ItemWriter,可以傳送郵件訊息。它將實際傳送訊息的職責委託給 MailSender 的例項。Spring Batch 提供了 SimpleMailMessageItemWriterBuilder 來構建 SimpleMailMessageItemWriter 的例項。

AvroItemWriter

AvroItemWriter 根據給定型別或 Schema 將 Java 物件序列化到 WriteableResource。寫入器可以可選地配置為在輸出中嵌入 Avro 模式或不嵌入。Spring Batch 提供了 AvroItemWriterBuilder 來構建 AvroItemWriter 的例項。

專用處理器

Spring Batch 提供了以下專用處理器:

ScriptItemProcessor

ScriptItemProcessor 是一個 ItemProcessor,它將當前要處理的項傳遞給提供的指令碼,並由處理器返回指令碼的結果。Spring Batch 提供了 ScriptItemProcessorBuilder 來構建 ScriptItemProcessor 的例項。

© . This site is unofficial and not affiliated with VMware.