Item Reader 和 Writer 實現
在本節中,我們將介紹前面章節尚未討論過的 reader 和 writer。
裝飾器
在某些情況下,使用者需要為預先存在的 ItemReader
追加特定的行為。Spring Batch 提供了一些開箱即用的裝飾器,可以為你的 ItemReader
和 ItemWriter
實現新增額外行為。
Spring Batch 包含以下裝飾器
SynchronizedItemStreamReader
當使用非執行緒安全的 ItemReader
時,Spring Batch 提供了 SynchronizedItemStreamReader
裝飾器,可用於使 ItemReader
執行緒安全。Spring Batch 提供了 SynchronizedItemStreamReaderBuilder
來構建 SynchronizedItemStreamReader
的例項。
例如,FlatFileItemReader
不是執行緒安全的,不能用於多執行緒 Step。可以透過 SynchronizedItemStreamReader
裝飾此 reader,以便在多執行緒 Step 中安全地使用它。這裡是如何裝飾此類 reader 的示例
@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 方法允許使用者提前檢視一個 item。重複呼叫 peek 會返回相同的 item,並且這是從 read
方法返回的下一個 item。Spring Batch 提供了 SingleItemPeekableItemReaderBuilder
來構建 SingleItemPeekableItemReader
的例項。
SingleItemPeekableItemReader 的 peek 方法不是執行緒安全的,因為在多個執行緒中無法保證 peek 的結果。只有其中一個 peek 過的執行緒會在下一次呼叫 read 時獲取到該 item。 |
SynchronizedItemStreamWriter
當使用非執行緒安全的 ItemWriter
時,Spring Batch 提供了 SynchronizedItemStreamWriter
裝飾器,可用於使 ItemWriter
執行緒安全。Spring Batch 提供了 SynchronizedItemStreamWriterBuilder
來構建 SynchronizedItemStreamWriter
的例項。
例如,FlatFileItemWriter
不是執行緒安全的,不能用於多執行緒 Step。可以透過 SynchronizedItemStreamWriter
裝飾此 writer,以便在多執行緒 Step 中安全地使用它。這裡是如何裝飾此類 writer 的示例
@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
,並在當前資源中寫入的 item 數量超過 itemCountLimitPerResource
時建立一個新的輸出資源。Spring Batch 提供了 MultiResourceItemWriterBuilder
來構建 MultiResourceItemWriter
的例項。
訊息系統 Reader 和 Writer
Spring Batch 為常用的訊息系統提供了以下 reader 和 writer
AmqpItemReader
AmqpItemReader
是一個 ItemReader
,它使用 AmqpTemplate
從 exchange 接收或轉換訊息。Spring Batch 提供了 AmqpItemReaderBuilder
來構建 AmqpItemReader
的例項。
AmqpItemWriter
AmqpItemWriter
是一個 ItemWriter
,它使用 AmqpTemplate
將訊息傳送到 AMQP exchange。如果在提供的 AmqpTemplate
中未指定名稱,訊息將傳送到無名 exchange。Spring Batch 提供了 AmqpItemWriterBuilder
來構建 AmqpItemWriter
的例項。
JmsItemReader
JmsItemReader
是一個用於 JMS 的 ItemReader
,它使用 JmsTemplate
。該 template 應有一個預設目的地,用於為 read()
方法提供 item。Spring Batch 提供了 JmsItemReaderBuilder
來構建 JmsItemReader
的例項。
JmsItemWriter
JmsItemWriter
是一個用於 JMS 的 ItemWriter
,它使用 JmsTemplate
。該 template 應有一個預設目的地,用於在 write(List)
中傳送 item。Spring Batch 提供了 JmsItemWriterBuilder
來構建 JmsItemWriter
的例項。
資料庫 Reader
Spring Batch 提供了以下資料庫 reader
Neo4jItemReader
Neo4jItemReader
是一個 ItemReader
,它使用分頁技術從圖資料庫 Neo4j 中讀取物件。Spring Batch 提供了 Neo4jItemReaderBuilder
來構建 Neo4jItemReader
的例項。
資料庫 Writer
Spring Batch 提供了以下資料庫 writer
Neo4jItemWriter
Neo4jItemWriter
是一個 ItemWriter
實現,它向 Neo4j 資料庫寫入資料。Spring Batch 提供了 Neo4jItemWriterBuilder
來構建 Neo4jItemWriter
的例項。
MongoItemWriter
MongoItemWriter
是一個 ItemWriter
實現,它使用 Spring Data 的 MongoOperations
實現向 MongoDB 儲存寫入資料。Spring Batch 提供了 MongoItemWriterBuilder
來構建 MongoItemWriter
的例項。
RepositoryItemWriter
RepositoryItemWriter
是 Spring Data 中 CrudRepository
的一個 ItemWriter
包裝器。Spring Batch 提供了 RepositoryItemWriterBuilder
來構建 RepositoryItemWriter
的例項。
特殊 Reader
Spring Batch 提供了以下特殊 reader
LdifReader
LdifReader
從 Resource
讀取 LDIF (LDAP 資料交換格式) 記錄,解析它們,併為每次執行的 read
返回一個 LdapAttribute
物件。Spring Batch 提供了 LdifReaderBuilder
來構建 LdifReader
的例項。