Item Reader 和 Writer 實現
在本節中,我們將向您介紹之前章節中尚未討論過的閱讀器和寫入器。
裝飾器
在某些情況下,您可能需要將專用行為附加到現有的 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 添加了一個 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 的例項。
訊息閱讀器和寫入器
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 的例項。
資料庫閱讀器
Spring Batch 提供了以下資料庫閱讀器:
MongoPagingItemReader
MongoPagingItemReader 是一個 ItemReader,它使用分頁技術從 MongoDB 讀取文件。Spring Batch 提供了 MongoPagingItemReaderBuilder 來構建 MongoPagingItemReader 的例項。
資料庫寫入器
Spring Batch 提供了以下資料庫寫入器:
MongoItemWriter
MongoItemWriter 是一個 ItemWriter 實現,它使用 Spring Data 的 MongoOperations 實現寫入 MongoDB 儲存。Spring Batch 提供了 MongoItemWriterBuilder 來構建 MongoItemWriter 的例項。
RepositoryItemWriter
RepositoryItemWriter 是 Spring Data 中 CrudRepository 的 ItemWriter 包裝器。Spring Batch 提供了 RepositoryItemWriterBuilder 來構建 RepositoryItemWriter 的例項。
專用閱讀器
Spring Batch 提供了以下專用閱讀器:
LdifReader
LdifReader 從 Resource 中讀取 LDIF (LDAP 資料交換格式) 記錄,解析它們,併為每次執行的 read 返回一個 LdapAttribute 物件。Spring Batch 提供了 LdifReaderBuilder 來構建 LdifReader 的例項。