此版本附带许多新功能、性能改进、依赖项更新和 API 弃用。本节介绍最重要的更改。有关更改的完整列表,请参阅 发行说明。
3 f0 c. k4 [2 ]4 s/ b% h- z7 r% @新特性新同步的 ItemStreamWriter与 类似SynchronizedItemStreamReader,此版本引入了 SynchronizedItemStreamWriter. 此功能在需要同步并发线程以不覆盖彼此的写入的多线程步骤中很有用。
. F; S4 B. D d+ h# @# ^ h G- ]用于命名查询的新 JpaQueryProvider此版本在使用 时引入了一个新JpaNamedQueryProvider的, JpaNativeQueryProvider以简化 JPA 命名查询的配置JpaPagingItemReader: [Java] 纯文本查看 复制代码 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。 * }0 T( b- x' Q! M; M8 a' f5 M
新的 JobParametersIncrementer 实现与 类似RunIdIncrementer,此版本添加了一个JobParametersIncrementer 基于DataFieldMaxValueIncrementerSpring Framework 的新版本。
% q# g1 x( ~% V2 A7 s9 _; uGraalVM 支持此版本增加了在 GraalVM 上运行 Spring Batch 应用程序的初始支持。该支持仍处于试验阶段,将在未来的版本中得到改进。
& F$ V. P! d* h! v4 r$ ]Java记录支持此版本增加了对使用 Java 记录作为面向块的步骤中的项目的支持。新增RecordFieldSetMapper支持平面文件到 Java 记录的数据映射,如下例所示: [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 记录,定义如下: [Java] 纯文本查看 复制代码 public record Person(int id, String name) { }
使用FlatFileItemReadernew将文件中的RecordFieldSetMapper数据映射到类型的记录。persons.csvPerson ; ~, y8 t6 h+ j( N t) U8 a p
性能改进在 RepositoryItemWriter 中使用批量写入直到 4.2 版,为了使用CrudRepository#saveAllin RepositoryItemWriter,需要扩展 writer 和 override write(List)。 7 s j, L3 K) w4 N
在此版本中,RepositoryItemWriter已更新为 CrudRepository#saveAll默认使用。 # N- O8 G4 j1 G1 C+ k
在 MongoItemWriter 中使用批量写入在for 循环中MongoItemWriter用于MongoOperations#save()将项目保存到数据库中。在此版本中,此编写器已更新为使用org.springframework.data.mongodb.core.BulkOperations。 : T f) A' p5 B( J2 Y5 H; ]8 J
作业开始/重启时间改进用于在内存中加载所有作业执行JobRepository#getStepExecutionCount()和步骤执行以在框架端进行计数的实现。在此版本中,实现已更改为使用 SQL 计数查询对数据库进行一次调用,以计算步骤执行次数。
( \+ G5 n& E$ k+ W; w$ s依赖更新此版本将依赖的 Spring 项目更新为以下版本:5 k- D1 A# ]0 j3 L
* l# S# _0 s; R4 S6 J
* O& ]: W; q. y5 R弃用API 弃用以下是此版本中已弃用的 API 列表:
& I' j9 h( g/ i" L4 s$ F/ Z: n6 Lorg.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()
; Z# |8 B& I6 D+ d! }; Z8 h( x
' p5 Y9 J7 B0 K0 }$ ^ L6 g( \建议的替换可以在每个已弃用 API 的 Javadoc 中找到。
9 b4 Q6 v0 }. y* L* l9 a. |SQLFire 支持弃用SQLFire自 2014 年 11 月 1 日起停产 。此版本不支持使用 SQLFire 作为作业存储库,并计划在 5.0 版中将其删除。 & M4 s. j6 ^% O$ @( v% |; S
, D, v! Z3 @& d$ I& n
|