Spring Batch 4.3 中的新增功能

Spring Batch 4.3 中的新增功能

此版本带来了许多新功能、性能改进、 依赖项更新和 API 弃用。本节介绍最 重要更改。有关更改的完整列表,请参阅发行说明spring-doc.cn

新功能

新的同步ItemStreamWriter

与 此版本类似,该版本引入了 .此功能在多线程步骤中非常有用 其中并发线程需要同步,以免覆盖彼此的写入。SynchronizedItemStreamReaderSynchronizedItemStreamWriterspring-doc.cn

用于命名查询的新 JpaQueryProvider

此版本引入了一个新的 next to 以简化 JPA 命名查询的配置,当 使用 :JpaNamedQueryProviderJpaNativeQueryProviderJpaPagingItemReaderspring-doc.cn

JpaPagingItemReader<Foo> reader = new JpaPagingItemReaderBuilder<Foo>()
   .name("fooReader")
   .queryProvider(new JpaNamedQueryProvider("allFoos", Foo.class))
   // set other properties on the reader
   .build();

新的 JpaCursorItemReader 实现

JPA 2.2 添加了将结果作为游标流式传输的功能,而不仅仅是分页。 此版本引入了一个新的 JPA 项目读取器,它使用此功能来 stream 以类似于 和 的基于游标的方式生成。JdbcCursorItemReaderHibernateCursorItemReaderspring-doc.cn

新的 JobParametersIncrementer 实现

与 类似,此版本添加了一个基于 Spring Framework 的新功能。RunIdIncrementerJobParametersIncrementerDataFieldMaxValueIncrementerspring-doc.cn

GraalVM 支持

此版本增加了对在 GraalVM 上运行 Spring Batch 应用程序的初始支持。 该支持仍处于试验阶段,并将在未来版本中得到改进。spring-doc.cn

Java 记录支持

该版本新增支持在面向块的步骤中使用 Java 记录作为项。 新增支持从平面文件到 Java 记录,如以下示例所示:RecordFieldSetMapperspring-doc.cn

@Bean
public FlatFileItemReader<Person> itemReader() {
	return new FlatFileItemReaderBuilder<Person>()
			.name("personReader")
			.resource(new FileSystemResource("persons.csv"))
			.delimited()
			.names("id", "name")
			.fieldSetMapper(new RecordFieldSetMapper<>(Person.class))
			.build();
}

在此示例中,类型是定义如下的 Java 记录:Personspring-doc.cn

public record Person(int id, String name) { }

使用 new 映射数据 将 file 设置为 .FlatFileItemReaderRecordFieldSetMapperpersons.csvPersonspring-doc.cn

性能改进

在 RepositoryItemWriter 中使用批量写入

直到版本 4.2,为了在 中使用, 需要扩展 Writer 并覆盖 。CrudRepository#saveAllRepositoryItemWriterwrite(List)spring-doc.cn

在此版本中,已更新为默认使用。RepositoryItemWriterCrudRepository#saveAllspring-doc.cn

在 MongoItemWriter 中使用批量写入

在 for 循环中使用的 将项目保存到数据库。在此版本中,此作者已 更新为使用。MongoItemWriterMongoOperations#save()org.springframework.data.mongodb.core.BulkOperationsspring-doc.cn

作业启动/重启时间改进

用于加载的实现 所有任务执行和步骤执行都在内存中,以在框架上进行计数 边。在此版本中,实现已更改为对 具有 SQL 计数查询的数据库,以便对步骤执行进行计数。JobRepository#getStepExecutionCount()spring-doc.cn

依赖项更新

此版本将依赖的 Spring 项目更新到以下版本:spring-doc.cn

弃用

API 弃用

以下是此版本中已弃用的 API 列表:spring-doc.cn

  • org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBeanspring-doc.cn

  • org.springframework.batch.core.explore.support.MapJobExplorerFactoryBeanspring-doc.cn

  • org.springframework.batch.core.repository.dao.MapJobInstanceDaospring-doc.cn

  • org.springframework.batch.core.repository.dao.MapJobExecutionDaospring-doc.cn

  • org.springframework.batch.core.repository.dao.MapStepExecutionDaospring-doc.cn

  • org.springframework.batch.core.repository.dao.MapExecutionContextDaospring-doc.cn

  • org.springframework.batch.item.data.AbstractNeo4jItemReaderspring-doc.cn

  • org.springframework.batch.item.file.transform.Alignmentspring-doc.cn

  • org.springframework.batch.item.xml.StaxUtilsspring-doc.cn

  • org.springframework.batch.core.launch.support.ScheduledJobParametersFactoryspring-doc.cn

  • org.springframework.batch.item.file.MultiResourceItemReader#getCurrentResource()spring-doc.cn

  • org.springframework.batch.core.JobExecution#stop()spring-doc.cn

可以在每个已弃用的 API 的 Javadoc 中找到建议的替换。spring-doc.cn

SQLFire 支持弃用

SQLFire 2014 年 11 月 1 日起停止服务。该版本废弃了对使用 SQLFire 的支持 作为作业存储库,并计划在版本 5.0 中删除它。spring-doc.cn