项目读取器和写入器实现
在本节中,我们将介绍您之前部分中尚未讨论的读取器和写入器。
装饰器
在某些情况下,用户需要将专门的行为附加到预先存在的 ItemReader
。Spring Batch 提供了一些开箱即用的装饰器,可以为您的 ItemReader
和 ItemWriter
实现添加额外的行为。
Spring Batch 包含以下装饰器
同步项读取器
当使用一个非线程安全的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();
}
单项可窥视项读取器
Spring Batch 包含一个装饰器,它为ItemReader
添加了一个窥视方法。这个窥视方法允许用户提前窥视一个项目。对窥视的重复调用返回相同的项目,这是从read
方法返回的下一个项目。Spring Batch 提供了SingleItemPeekableItemReaderBuilder
来构建SingleItemPeekableItemReader
的实例。
SingleItemPeekableItemReader 的窥视方法不是线程安全的,因为它不可能在多个线程中遵守窥视。只有其中一个窥视的线程会在下一次调用 read 时获得该项目。 |
同步项写入器
当使用一个非线程安全的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
包装一个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
是一个用于 JMS 的 ItemReader
,它使用 JmsTemplate
。模板应该有一个默认目标,用于为 read()
方法提供项目。Spring Batch 提供 JmsItemReaderBuilder
来构建 JmsItemReader
的实例。
JmsItemWriter
JmsItemWriter
是一个用于 JMS 的 ItemWriter
,它使用 JmsTemplate
。模板应该有一个默认目标,用于在 write(List)
中发送项目。Spring Batch 提供 JmsItemWriterBuilder
来构建 JmsItemWriter
的实例。
数据库读取器
Spring Batch 提供以下数据库读取器
Neo4jItemReader
Neo4jItemReader
是一个 ItemReader
,它使用分页技术从图数据库 Neo4j 读取对象。Spring Batch 提供了一个 Neo4jItemReaderBuilder
来构建 Neo4jItemReader
的实例。
MongoItemReader
MongoItemReader
是一个 ItemReader
,它使用分页技术从 MongoDB 读取文档。Spring Batch 提供了一个 MongoItemReaderBuilder
来构建 MongoItemReader
的实例。
HibernateCursorItemReader
HibernateCursorItemReader
是一个 ItemStreamReader
,用于读取基于 Hibernate 构建的数据库记录。它执行 HQL 查询,然后在初始化时,在调用 read()
方法时遍历结果集,依次返回与当前行对应的对象。Spring Batch 提供了一个 HibernateCursorItemReaderBuilder
来构建 HibernateCursorItemReader
的实例。
数据库写入器
Spring Batch 提供以下数据库写入器
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
的实例。
HibernateItemWriter
HibernateItemWriter
是一个 ItemWriter
,它使用 Hibernate 会话来保存或更新不属于当前 Hibernate 会话的实体。Spring Batch 提供了一个 HibernateItemWriterBuilder
来构建 HibernateItemWriter
的实例。
专用读取器
Spring Batch 提供以下专用读取器
LdifReader
LdifReader
从 Resource
中读取 LDIF(LDAP 数据交换格式)记录,解析它们,并为每次执行的 read
返回一个 LdapAttribute
对象。Spring Batch 提供了一个 LdifReaderBuilder
来构建 LdifReader
的实例。