🚀 Enhancements
- Add
@FunctionalInterfacetoStepInterruptionPolicy#5402 - Fix
SimpleJobOperatorjobRegistrystate message #5369 - Improve
JdbcJobExecutionDao#synchronizeStatus(StepExecution)#5365 - Replace deprecated
Jackson2JsonMessageConverterwithJacksonJsonMessageConverter#5350 - Replace
System.getProperty("line.separator")withSystem.lineSeparator()#5341 - Remove unnecessary null check against
createTimeof execution #5304 - Inaccurate exception message when attempting to start a running job #5280
- Replace
CopyOnWriteArrayListwithArrayListinJdbcPagingItemReaderandJpaPagingItemReaderfor performance and correctness #5112 - Eliminate unnecessary query for current version #4797
- Running a job causes retrieval of full history of job executions #4169
- Not unique steps names in a
FlowJobshould log a warning #3757 - Remove unused
ClassUtilsimport fromJdbcPagingItemReader#5407
🐞 Bug fixes
ChunkOrientedStepdoes not restore the step execution when a chunk transaction is not committed #5594MongoCursorItemReaderthrowsNullPointerExceptionwhen closed before opening #5589- MariaDB 6.0 migration fails when renaming
BATCH_JOB_SEQ#5586 - listener exceptions are skippable in scan mode but fatal elsewhere #5585
- Fix missing page increase in
AbstractPaginatedDataItemReader#5583 - Job-scoped beans are not usable from worker threads of multi-threaded steps and parallel flows #5576
- Restart after a failure during chunk scanning skips the remaining items of the chunk in
ChunkOrientedStep#5558 NullPointerExceptionwhen closing an unopenedJpaPagingItemReader#5539@OnSkipInRead/@OnSkipInProcess/@OnSkipInWritemethods are ignored byChunkOrientedStepBuilder#listener(Object)#5531- Misleading logs in scan mode without retries #5527
FlatFileItemReaderBuilder.addComment()throwsUnsupportedOperationExceptionaftercomments(...)#5520DelimitedLineTokenizerthrowsStringIndexOutOfBoundsExceptionwhen a field is a single quote character #5519FixedLengthTokenizerin strict mode rejects lines when the open-ended range starts at or before the first range's min #5518JobFlowExecutorleaks aStepExecutionacross job executions on a shared thread when no transition matches a step'sExitStatus#5514- Rolled-back chunk counted as written and step COMPLETED in
ChunkOrientedStep(fault-tolerant retry ofOptimisticLockException) #5509 TransientTransactionErrorinMongoSequenceIncrementerduring parallel job executions #5507- Fix
QNamedeserialization inJacksonExecutionContextStringSerializer#5502 ChunkOrientedStepscan mode passes the processed chunk toChunkListener#beforeChunkand silently drops scan items when the listener throws #5493ChunkOrientedStepdoes not re-invoke theItemProcessorduring chunk scanning, unlikeFaultTolerantChunkProcessor#5490JpaCursorItemReader.doClose()missing null check onentityManager#5486- Fix incorrect nullability contract for
encodinginStaxEventItemReader#5483 JsonFunctionalTestsfails on Windows due to CRLF #5481@OnChunkErroris never invoked on a chunk-oriented step #5468- Interface listener callbacks are invoked twice when an item handler also has a listener annotation #5466
spring.batch.job.launch.countis silently missing: theJobOperatorkeepsObservationRegistry.NOOPon most configuration paths #5463- Inconsistent
JobParametertype handling between storage and retrieval in Spring Batch 6.x #5455 @BeforeStep/@AfterStepmethods are ignored byChunkOrientedStepBuilder#listener(Object)#5451- Replace jetbrains
@NotNullwith jspecify@NonNull#5443 SimpleJobOperator.restart(JobExecution)masks the real failure reason with a misleading "job execution already running" message #5439- Missing GraalVM runtime hints for MongoDB persistence model classes and resources #5435
- Fix
JsonFileItemWriterto produce valid JSON when append allowed with custom header/footer callback #5432 - Step name is null when the step is not defined as a bean and not assigned a name #5278
- Forced Sort Passing via
sorts()Method When Building withMongoCursorItemReaderBuilderand Query #4860
📔 Documentation
JpaItemWriterdescription in Appendix of documentation is wrong #5556- Inaccurate documentation of remote chunking and remote partitioning samples regarding JMS headers #5513
- Fix typos in Javadoc comments #5511
- Clarify retryable reads compatibility with forward-only semantics #5510
- Clarify
SkipListenercontract and reference docs about transaction scope #5494 - Reference documentation's tracing example registers a handler that creates no spans and fails the job #5475
- Fix typo in Javadoc of
JobOperator.start()#5434 - Wrong example in "Registering
ItemStreamwith aStep" #5429 - Fix incorrect Javadoc reference in
JobExecution.isStopped()#5414 - Fix javadoc in
SqlPagingQueryUtils#5403 - Fix typo in
EnableBatchProcessingJavadoc #5375 - Inaccurate JavaDoc of
BatchStatus.isLessThanOrEqualTo#5285 - Enhance documentation about leveraging
IteratorItemReaderto reuse scrolling APIs from Spring Data #4484
🔨 Tasks
- Update Apache Artemis
groupIdtoorg.apache.artemis#5482 - Update Groovy version to 5.1.2 #5327
- Consistently use
.versionsuffix for version properties inpom.xml#5506
🆙 Dependency Upgrades
Spring dependencies
Spring Framework: 7.0.9 -> 7.0.10
Spring Integration: 7.0.6 -> 7.0.7
Spring AMQP: 4.0.5 -> 4.0.6
Spring Kafka: 4.0.7 -> 4.0.8
Spring Data: 2025.1.7 -> 2025.1.8
Spring LDAP: 4.0.5 -> 4.0.6
Micrometer: 1.16.7 -> 1.16.8
Other dependencies
Apache Avro: 1.12.1 -> 1.12.2
Hibernate ORM: 7.2.18.Final -> 7.2.25.Final
Jackson 2: 2.20.2 -> 2.21.7
Jackson 3: 3.0.4 -> 3.1.7
❤️ Contributors
Thank you to all the contributors who worked on this release:
@acktsap, @ahrytsiuk, @Akhil-1527, @AndreaBosmanWork, @apptie, @banseok1216, @benelog, @beyondwin, @cladren123, @COBI-98, @dhritimanchakra, @DragonFSKY, @enduf7686, @GaBaljaintheroom, @Gorock, @hunseonglee, @hutiefang76, @HyunWoo9930, @jjh75607, @jjj-n, @klopfdreh, @KMGeon, @kojw1017, @kyungrae, @leedaegeon, @leestana01, @mjd507, @noojung, @pius712, @quaff, @ryujungkyun, @scordio, @xxxxxxjun, and @yuseogi0218