|
对于最新稳定版本,请使用 Spring Batch 文档 6.0.3! |
Item Reader 和 Writer 实现
在本节中,我们将向读者介绍之前各节尚未讨论过的读取器和写入器。
装饰器
在某些情况下,用户需要将专用行为附加到现有的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 添加了一个 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 的实例。
消息读取器和写入器
Spring Batch 为常用的消息系统提供了以下读取器和写入器:
AmqpItemReader
AmqpItemReader 是一个 ItemReader,它使用 AmqpTemplate 从交换机接收或转换消息。Spring Batch 提供了一个 AmqpItemReaderBuilder 来构建 AmqpItemReader 的实例。
AmqpItemWriter
AmqpItemWriter 是一个 ItemWriter,它使用 AmqpTemplate 将消息发送到 AMQP 交换器。如果在提供的 AmqpTemplate 中未指定名称,消息将被发送到无名交换器。Spring Batch 提供了一个 AmqpItemWriterBuilder 用于构建 AmqpItemWriter 的实例。
JmsItemReader
JmsItemReader 是一个用于使用 JmsTemplate 的 JMS 的 ItemReader。该模板应有一个默认目的地,用于为 read() 方法提供条目。Spring Batch 提供了一个 JmsItemReaderBuilder 来构建 JmsItemReader 的实例。
JmsItemWriter
JmsItemWriter 是一个用于使用 JmsTemplate 的 JMS 的 ItemWriter。该模板应有一个默认目的地,用于在 write(List) 中发送消息。Spring Batch 提供了一个 JmsItemWriterBuilder 来构建 JmsItemWriter 的实例。
数据库读取器
Spring Batch 提供以下数据库读取器:
Neo4jItemReader
Neo4jItemReader 是一个 ItemReader,它通过使用分页技术从 Neo4j 图数据库中读取对象。Spring Batch 提供了一个 Neo4jItemReaderBuilder 用于构建 Neo4jItemReader 的实例。
数据库写入器
Spring Batch 提供以下数据库写入器:
Neo4jItemWriter
Neo4jItemWriter 是一个将数据写入 Neo4j 数据库的 ItemWriter 实现。
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 的实例。
专业读取器
Spring Batch 提供以下专用读取器:
LdifReader
LdifReader 从 Resource 读取 LDIF(LDAP 数据交换格式)记录,
解析它们,并为每个执行的 read 返回一个 LdapAttribute 对象。Spring Batch
提供了一个 LdifReaderBuilder 用于构建 LdifReader 的实例。