Spring Batch 4.3 中的新增功能

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

新的功能

新同步的 ItemStreamWriter

与 类似SynchronizedItemStreamReader,此版本引入了 SynchronizedItemStreamWriter. 此功能在需要同步并发线程以不覆盖彼此的写入的多线程步骤中很有用。

用于命名查询的新 JpaQueryProvider

此版本在使用 时引入了一个新JpaNamedQueryProvider的, JpaNativeQueryProvider以简化 JPA 命名查询的配置JpaPagingItemReader

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 项目阅读器,它使用此功能以类似于JdbcCursorItemReader 和的基于光标的方式流式传输结果HibernateCursorItemReader

新的 JobParametersIncrementer 实现

与 类似RunIdIncrementer,此版本添加了一个JobParametersIncrementer 基于DataFieldMaxValueIncrementerSpring Framework 的新功能。

GraalVM 支持

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

Java记录支持

此版本增加了对使用 Java 记录作为面向块的步骤中的项目的支持。新增RecordFieldSetMapper支持平面文件到Java记录的数据映射,如下例所示:

@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();
}

在这个例子中,Person类型是一个 Java 记录,定义如下:

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

使用FlatFileItemReadernew将文件中的RecordFieldSetMapper数据映射到类型的记录。persons.csvPerson

性能改进

在 RepositoryItemWriter 中使用批量写入

直到 4.2 版,为了使用CrudRepository#saveAllin RepositoryItemWriter,需要扩展 writer 和 override write(List)

在此版本中,RepositoryItemWriter已更新为 CrudRepository#saveAll默认使用。

在 MongoItemWriter 中使用批量写入

在for 循环中MongoItemWriter用于MongoOperations#save()将项目保存到数据库中。在此版本中,此编写器已更新为使用org.springframework.data.mongodb.core.BulkOperations

作业开始/重启时间改进

用于在内存中加载所有作业执行JobRepository#getStepExecutionCount()和步骤执行以在框架端进行计数的实现。在此版本中,实现已更改为使用 SQL 计数查询对数据库进行一次调用,以计算步骤执行次数。

依赖更新

此版本将依赖的 Spring 项目更新为以下版本:

  • Spring框架 5.3

  • Spring数据 2020.0

  • 弹簧集成 5.4

  • Spring AMQP 2.3

  • Apache Kafka 2.6 的 Spring

  • 千分尺 1.5

弃用

API 弃用

以下是此版本中已弃用的 API 列表:

  • org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean

  • org.springframework.batch.core.explore.support.MapJobExplorerFactoryBean

  • org.springframework.batch.core.repository.dao.MapJobInstanceDao

  • org.springframework.batch.core.repository.dao.MapJobExecutionDao

  • org.springframework.batch.core.repository.dao.MapStepExecutionDao

  • org.springframework.batch.core.repository.dao.MapExecutionContextDao

  • org.springframework.batch.item.data.AbstractNeo4jItemReader

  • org.springframework.batch.item.file.transform.Alignment

  • org.springframework.batch.item.xml.StaxUtils

  • org.springframework.batch.core.launch.support.ScheduledJobParametersFactory

  • org.springframework.batch.item.file.MultiResourceItemReader#getCurrentResource()

  • org.springframework.batch.core.JobExecution#stop()

建议的替换可以在每个已弃用 API 的 Javadoc 中找到。

SQLFire 支持弃用

SQLFire自 2014 年 11 月 1 日起停产 。此版本不支持使用 SQLFire 作为作业存储库,并计划在 5.0 版中将其删除。


1. see XML Configuration