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.