Skip to content

Releases

v6.1.0-RC1

v6.1.0-RC1 Pre-release
Pre-release

Choose a tag to compare

@fmbenhassine fmbenhassine released this 22 Oct 17:06
cac64d6

⭐ New features

  • Provide a @JobParameter annotation for more convenient access to variables in JobParameters. #5563
  • Add PageableItemReader #5477
  • Make JsonLineMapper agnostic to the JSON library #5345
  • Introduce JsonLineAggregator for FlatFileItemWriter to write JSON Lines format file #5344
  • Supports to create step execution with context #5184

🚀 Enhancements

  • Introduce RemoteChunkingManagerBuilder and deprecate RemoteChunkingManagerStepBuilder and its factory #5598
  • JdbcJobExecutionDao.findJobExecutions issues 1 + 3N queries for N executions #5570
  • Polish DatabaseType #5542
  • Improve JdbcJobExecutionDao#synchronizeStatus(StepExecution) #5365
  • Refactor JDBC DAOs to use named parameters instead of positional parameters and JdbcClient instead of JdbcTemplate #4804
  • Eliminate unnecessary query for current version #4797
  • Poll workers of a partitioned step with a database query #4705
  • Running a job causes retrieval of full history of job executions #4169
  • Not unique steps names in a FlowJob should log a warning #3757

🐞 Bug fixes

  • Restart after a chunk scan that ended with a skipped item processes that item again #5599
  • ChunkOrientedStep does not restore the step execution when a chunk transaction is not committed #5594
  • MongoCursorItemReader throws NullPointerException when 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
  • BatchObservabilityBeanPostProcessor doesn't respect manually configured observationRegistry #5566
  • Failed job launch leaves an orphan JobInstance behind #5562
  • Restart after a failure during chunk scanning skips the remaining items of the chunk in ChunkOrientedStep #5558
  • NullPointerException when closing an unopened JpaPagingItemReader #5539
  • Misleading logs in scan mode without retries #5527
  • FlatFileItemReaderBuilder.addComment() throws UnsupportedOperationException after comments(...) #5520
  • DelimitedLineTokenizer throws StringIndexOutOfBoundsException when a field is a single quote character #5519
  • FixedLengthTokenizer in strict mode rejects lines when the open-ended range starts at or before the first range's min #5518
  • JobFlowExecutor leaks a StepExecution across job executions on a shared thread when no transition matches a step's ExitStatus #5514
  • Aggregator of remote partitions is not passed all worker steps upon controller restart #5158

📔 Documentation

  • JpaItemWriter description in Appendix of documentation is wrong #5556

🆙 Dependency Upgrades

Spring Framework: 7.1.0-RC1
Spring Integration: 7.2.0-RC1
Spring AMQP: 4.2.0-RC1
Spring Kafka: 4.2.0-RC1
Spring Data: 2026.1.0-RC1
Spring LDAP: 4.2.0-RC1
Micrometer: 1.18.0-RC1

❤️ Contributors

Thank you to all the contributors who worked on this release:

@ahrytsiuk, @Akhil-1527, @AndreaBosmanWork, @beyondwin, @COBI-98, @hunseonglee, @Ichanskiy, @jjh75607, @jjj-n, @PauliusPeciura, @pius712, @quaff, @ryujungkyun, and @scordio

v6.0.6

Choose a tag to compare

@fmbenhassine fmbenhassine released this 22 Oct 17:05
cc8c2f3

🚀 Enhancements

  • Add @FunctionalInterface to StepInterruptionPolicy #5402
  • Fix SimpleJobOperator jobRegistry state message #5369
  • Improve JdbcJobExecutionDao#synchronizeStatus(StepExecution) #5365
  • Replace deprecated Jackson2JsonMessageConverter with JacksonJsonMessageConverter #5350
  • Replace System.getProperty("line.separator") with System.lineSeparator() #5341
  • Remove unnecessary null check against createTime of execution #5304
  • Inaccurate exception message when attempting to start a running job #5280
  • Replace CopyOnWriteArrayList with ArrayList in JdbcPagingItemReader and JpaPagingItemReader for 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 FlowJob should log a warning #3757
  • Remove unused ClassUtils import from JdbcPagingItemReader #5407

🐞 Bug fixes

  • ChunkOrientedStep does not restore the step execution when a chunk transaction is not committed #5594
  • MongoCursorItemReader throws NullPointerException when 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
  • NullPointerException when closing an unopened JpaPagingItemReader #5539
  • @OnSkipInRead/@OnSkipInProcess/@OnSkipInWrite methods are ignored by ChunkOrientedStepBuilder#listener(Object) #5531
  • Misleading logs in scan mode without retries #5527
  • FlatFileItemReaderBuilder.addComment() throws UnsupportedOperationException after comments(...) #5520
  • DelimitedLineTokenizer throws StringIndexOutOfBoundsException when a field is a single quote character #5519
  • FixedLengthTokenizer in strict mode rejects lines when the open-ended range starts at or before the first range's min #5518
  • JobFlowExecutor leaks a StepExecution across job executions on a shared thread when no transition matches a step's ExitStatus #5514
  • Rolled-back chunk counted as written and step COMPLETED in ChunkOrientedStep (fault-tolerant retry of OptimisticLockException) #5509
  • TransientTransactionError in MongoSequenceIncrementer during parallel job executions #5507
  • Fix QName deserialization in JacksonExecutionContextStringSerializer #5502
  • ChunkOrientedStep scan mode passes the processed chunk to ChunkListener#beforeChunk and silently drops scan items when the listener throws #5493
  • ChunkOrientedStep does not re-invoke the ItemProcessor during chunk scanning, unlike FaultTolerantChunkProcessor #5490
  • JpaCursorItemReader.doClose() missing null check on entityManager #5486
  • Fix incorrect nullability contract for encoding in StaxEventItemReader #5483
  • JsonFunctionalTests fails on Windows due to CRLF #5481
  • @OnChunkError is 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.count is silently missing: the JobOperator keeps ObservationRegistry.NOOP on most configuration paths #5463
  • Inconsistent JobParameter type handling between storage and retrieval in Spring Batch 6.x #5455
  • @BeforeStep/@AfterStep methods are ignored by ChunkOrientedStepBuilder#listener(Object) #5451
  • Replace jetbrains @NotNull with 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 JsonFileItemWriter to 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 with MongoCursorItemReaderBuilder and Query #4860

📔 Documentation

  • JpaItemWriter description 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 SkipListener contract 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 ItemStream with a Step" #5429
  • Fix incorrect Javadoc reference in JobExecution.isStopped() #5414
  • Fix javadoc in SqlPagingQueryUtils #5403
  • Fix typo in EnableBatchProcessing Javadoc #5375
  • Inaccurate JavaDoc of BatchStatus.isLessThanOrEqualTo #5285
  • Enhance documentation about leveraging IteratorItemReader to reuse scrolling APIs from Spring Data #4484

🔨 Tasks

  • Update Apache Artemis groupId to org.apache.artemis #5482
  • Update Groovy version to 5.1.2 #5327
  • Consistently use .version suffix for version properties in pom.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, @Andrea...

Read more

6.1.0-M2

6.1.0-M2 Pre-release
Pre-release

Choose a tag to compare

@fmbenhassine fmbenhassine released this 24 Sep 13:21
6d80f56

⭐ New features

  • Allow to use Mongo JobRepository with any PlatformTransactionManager #5508
  • Add a builder for ResourcesItemReader with support for specifying resources via a pattern #5487
  • Introduce BatchConstants #5190
  • Default reader/writer name to the bean name #5149
  • Support specifying resource locations using a pattern in MultiResourceItemReaderBuilder #5056
  • Add support for custom collection prefix in MongoDB Job repository #4980
  • Add compile-time safety for mutually exclusive builder methods #4888
  • Add schema locations to DatabaseType to prevent typos in the metadata tables string path #4586

🐞 Bug fixes

  • Repository/DAO-level count methods cannot soundly validate job/step existence #5544
  • @OnSkipInRead/@OnSkipInProcess/@OnSkipInWrite methods are ignored by ChunkOrientedStepBuilder#listener(Object) #5531
  • Rolled-back chunk counted as written and step COMPLETED in ChunkOrientedStep (fault-tolerant retry of OptimisticLockException) #5509
  • TransientTransactionError in MongoSequenceIncrementer during parallel job executions #5507
  • Fix QName deserialization in JacksonExecutionContextStringSerializer #5502
  • ChunkOrientedStep scan mode passes the processed chunk to ChunkListener#beforeChunk and silently drops scan items when the listener throws #5493
  • ChunkOrientedStep does not re-invoke the ItemProcessor during chunk scanning, unlike FaultTolerantChunkProcessor #5490
  • JpaCursorItemReader.doClose() missing null check on entityManager #5486
  • Fix incorrect nullability contract for encoding in StaxEventItemReader #5483
  • JsonFunctionalTests fails on Windows due to CRLF #5481
  • @OnChunkError is 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.count is silently missing: the JobOperator keeps ObservationRegistry.NOOP on most configuration paths #5463
  • Inconsistent JobParameter type handling between storage and retrieval in Spring Batch 6.x #5455
  • @BeforeStep/@AfterStep methods are ignored by ChunkOrientedStepBuilder#listener(Object) #5451
  • Replace jetbrains @NotNull with 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 JsonFileItemWriter to 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 with MongoCursorItemReaderBuilder and Query #4860
  • Incorrect invocation order of job execution listener in remote partitioning #4133
  • Remote-chunking implementation does not support parallel executions of the same job #1372

🚀 Enhancements

  • Remove redundant methods which are identical to default method #5516
  • Inconsistent builder method name: MultiResourceItemReaderBuilder.setStrict() #5512
  • Improve DefaultJobParametersConverter and JsonJobParametersConverter #5457
  • Replace isAssignableFrom() with isInstance() where feasible #5427
  • Remove unused ClassUtils import from JdbcPagingItemReader #5407
  • Add @FunctionalInterface to StepInterruptionPolicy #5402
  • Fix SimpleJobOperator jobRegistry state message #5369
  • Replace deprecated Jackson2JsonMessageConverter with JacksonJsonMessageConverter #5350
  • Replace System.getProperty("line.separator") with System.lineSeparator() #5341
  • Remove unnecessary null check against createTime of execution #5304
  • Inaccurate exception message when attempting to start a running job #5280
  • Improve JacksonExecutionContextStringSerializer #5233
  • Replace custom converters with DefaultFormattingConversionService #5186
  • Move async processing APIs to spring-batch-core #5185
  • Replace CopyOnWriteArrayList with ArrayList in JdbcPagingItemReader and JpaPagingItemReader for performance and correctness #5112
  • Add flushing support in RepositoryItemWriter #5073

📔 Documentation

  • Fix Javadoc #5545
  • 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 SkipListener contract 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 ItemStream with a Step #5429
  • Fix incorrect Javadoc reference in JobExecution.isStopped() #5414
  • Fix javadoc in SqlPagingQueryUtils #5403
  • Fix typo in EnableBatchProcessing Javadoc #5375
  • Inaccurate JavaDoc of BatchStatus.isLessThanOrEqualTo #5285
  • Enhance documentation about leveraging IteratorItemReader to reuse scrolling APIs from Spring Data #4484

🔨 Tasks

  • Consistently use .version suffix for version properties in pom.xml #5506
  • Update Apache Artemis groupId to org.apache.artemis #5482
  • Update Groovy version to 5.1.2 #5327
  • Deprecate JobExecution convenience getters for JobInstance id #5533
  • Deprecate setRepository in RepositoryItemWriter #5473
  • Deprecate setRepository and setSorts in RepositoryItemReader #5472
  • Deprecate Derby support since Apache Derby is retired #5254
  • Deprecate JobInstance::getInstanceId for removal to eliminate redundancy [#5244](https://github.com/spring-projects/spring-batch/...
Read more

v6.1.0-M1

v6.1.0-M1 Pre-release
Pre-release

Choose a tag to compare

@fmbenhassine fmbenhassine released this 21 Aug 00:08
19fbf65

🐞 Bug Fixes

  • Fix incorrect handling of malformed input in FlatFileItemReader #5496
  • Fix incorrect deserialization in DefaultExecutionContextSerializer #5497
  • Fix incorrect deserialization in JobParameterDeserializer #5498

🆙 Dependency Upgrades

  • Spring Framework: 7.1.0-M1
  • Spring Integration: 7.2.0-M1
  • Spring AMQP: 4.2.0-M1
  • Spring Kafka: 4.2.0-M1
  • Spring Data: 2026.1.0-M1
  • Micrometer: 1.18.0-M1

❤️ Contributors

Thank you to all the contributors who worked on this release!

v6.0.5

Choose a tag to compare

@fmbenhassine fmbenhassine released this 21 Aug 00:08
f62a2a6

Upgrade notes

Spring Integration 7.0.6+ introduced a security fix that restricts DefaultJmsHeaderMapper's inbound property mapping to an explicit allowlist, which defaults to only the content_type property. Remote chunking and remote partitioning over JMS rely on Spring Integration's correlationId, sequenceNumber and sequenceSize message headers to match replies from workers back to the manager's reply aggregator. As user-defined JMS properties, these headers were no longer mapped back into message headers by default, causing jobs to hang or fail with IllegalStateException: Null correlation not allowed.

If you use remote chunking or remote partitioning over JMS, configure your Jms.messageDrivenChannelAdapter beans with a header mapper that maps these headers:

Jms.messageDrivenChannelAdapter(connectionFactory)
     .headerMapper(new DefaultJmsHeaderMapper("*"))
     .destination("replies")

If mapping all headers is too permissive for your security requirements, restrict the allowlist to just what Spring Batch needs:
new DefaultJmsHeaderMapper("correlationId", "sequenceNumber", "sequenceSize").

🐞 Bug Fixes

  • Fix incorrect handling of malformed input in FlatFileItemReader #5496
  • Fix incorrect deserialization in DefaultExecutionContextSerializer #5497
  • Fix incorrect deserialization in JobParameterDeserializer #5498

🆙 Dependency Upgrades

  • Spring Framework: 7.0.9
  • Spring Integration: 7.0.6
  • Spring AMQP: 4.0.5
  • Spring Kafka: 4.0.7
  • Spring Data: 2025.1.7
  • Spring Retry: 2.0.13
  • Spring LDAP: 4.0.5
  • Micrometer: 1.16.7

❤️ Contributors

Thank you to all the contributors who worked on this release!

v6.0.4

Choose a tag to compare

@fmbenhassine fmbenhassine released this 10 Jun 15:08

🚀 Enhancements

  • Optimize MongoStepExecutionDao#getLastStepExecution to filter and sort at the database level #5385
  • Performance in SimpleJobRepository.update(StepExecution) since Spring Batch 6.x #5360
  • MongoJobExecutionDao.findRunningJobExecutions issues N+1 MongoDB queries #5356

🐞 Bug fixes

  • Generic SkipListener in ChunkOrientedStepBuilder #5412
  • ResourcelessJobRepository::getJobInstanceCount violate API contract #5411
  • ScopeNotActiveException with @StepScope and Local Chunking #5398
  • RecordFieldSetMapper rejects null values for nullable types after jSpecify nullability refinement #5392
  • EmptyResultDataAccessException on getLastJobExecution when no job execution is found #5389
  • FlowStep sets job status to completed even when there are more pending steps #5381
  • Incorrect handling of skip policy with JPA infrastructure #5377
  • ExitStatus#setExitException breaks immutability contract #5366
  • Chunk scan mode does not isolate each scanned item in its own transaction #5361
  • Generic ItemReader in ChunkOrientedStepBuilder #5358
  • NullPointerException in JacksonJsonObjectReader.close() and GsonJsonObjectReader.close() #5281
  • MongoJobInstanceDao: getJobNames() violates interface contract and getJobInstances() performs pagination in memory #5274
  • appendAllowed(true) breaks JSON array when the writer is opened/written/closed multiple times #5272
  • ExecutionContext dirty flag is never cleared #5249
  • SimpleStepExecutionSplitter does not restart COMPLETED partitions even when allowStartIfComplete=true #5238
  • JsonItemReaderBuilder should not substitute null resource with ByteArrayResource #5234
  • SynchronizedItemStreamReader update call is not threadsafe #5201
  • CompositeItemReader Does Not Reset Iterator for Subsequent Job Executions #4926

📔 Documentation

  • Missing documentation about transaction management in multi-threaded steps #5386
  • Outdated documentation in Scalability reference page #5355
  • Stop/restart sample README references a test that no longer exists #5391
  • Unable to use JsonLineMapper with Jackson 2 #5330

🔨 Tasks

  • Restore LDIF support test coverage #5236

❤️ Contributors

Thank you to all the contributors who worked on this release:

@banseok1216, @acktsap, @seonwooj0810, @won-seoop, @KMGeon, @quaff, @combe4259, @therepanic, @ShinjoWang, @Wordbe, @goutamadwant, @gideruette, @seonwooj0810, @MinChul-Son


Full Changelog: v6.0.3...v6.0.4

v5.2.6

Choose a tag to compare

@fmbenhassine fmbenhassine released this 10 Jun 11:00
39c91c1

🐞 Bug fixes

  • CompositeItemReader Does Not Reset Iterator for Subsequent Job Executions #4926
  • ExecutionContext dirty flag is never cleared #5249
  • appendAllowed(true) breaks JSON array when the writer is opened/written/closed multiple times #5272
  • NullPointerException in JacksonJsonObjectReader.close() and GsonJsonObjectReader.close() #5281
  • FlowStep sets job status to completed even when there are more pending steps #5381

🆙 Dependency Upgrades

  • Spring Framework: 6.2.19
  • Spring Retry: 2.0.13
  • Spring Kafka: 3.3.16
  • Spring AMQP: 3.2.11

❤️ Contributors

Thank you to all the contributors who contributed to this release!


Full change log: v5.2.5...v5.2.6

v6.0.3

Choose a tag to compare

@fmbenhassine fmbenhassine released this 18 Mar 15:08

⭐ New features

  • Add configuration property to set the job instance incrementer name #5245
  • Add support to configure job instance incrementer name through environment variable / system property #5332

🚀 Enhancements

  • Inconsistent logging for step execution #5279
  • Redundant null id null checks #5250

🐞 Bug fixes

  • skip listeners registered through ChunkOrientedStepBuilder#listener are ignored #5347
  • Incorrect counters with local chunking #5337
  • Exceptions are not reported with local chunking #5336
  • CommandLineJobOperator.parse() truncates parameter values containing '=' #5295
  • Incorrect rollbackCount in scan mode in ChunkOrientedStep #5247
  • JobOperator creates its own MapJobRegistry ignoring explicitly defined JobRegistry Spring bean in application #5229
  • Transaction is not rolled back before chunk scanning in ChunkOrientedStep with skip policy #5210
  • Polymorphic StepExecutionListeners registered through ChunkOrientedStepBuilder#listener are ignored #5094
  • V6 migration script for SQL Server fails #5276
  • Reinstate inadvertently removed protected method in StaxEventItemWriter #5260

📔 Documentation

  • Clarify ItemWriter contract regarding empty chunks #5319
  • Fix incorrect javadoc references in JobContext #5342
  • Improve and fix the Javadoc link #5290
  • Missing documentation about fault tolerance features handling in local chunking #5338

🔨 Tasks

  • Update test containers version #5288
  • Add Dependabot for GitHub Actions #5259

❤️ Contributors

Thank you to all the contributors who worked on this release:

@jzheaux, @trisberg, @marschall , @beatjost, @Jony-Jas, @HongYeseul, @Wordbe, @scordio, @KMGeon, @banseok1216, @quaff , @GaBaljaintheroom and @yunhobb

v5.2.5

Choose a tag to compare

@fmbenhassine fmbenhassine released this 18 Mar 21:25
793144f

⭐ New features

  • Add ZonedDateTime and OffsetDateTime support to JobParametersConverter #5178

🐞 Bug fixes

  • Cannot deserialize TopicPartition from JobRepository #3797
  • Errors are not propagated from job execution #808
  • Minor logging issue when a step or job completes instantly #5037
  • The implementation of jumpToItem(int itemLastIndex) in AbstractPaginatedDataItemReader does not handle restart behavior correctly. #5136
  • Incorrect resource cleanup order in AbstractCursorItemReader#doClose leads to inconsistent behavior #5109
  • OptimisticLockingFailureException in JobRepositoryTestUtils.removeJobExecutions() since Spring Batch 5.2.3 #5161
  • WriteConflict in MongoSequenceIncrementer during parallel job executions #4960

📔 Documentation

  • Elaborate usage of PlatformTransactionManager #4787

🆙 Dependency Upgrades

  • Spring Framework: 6.2.17
  • Micrometer: 1.14.14
  • Spring Integration: 6.4.10
  • Spring AMQP: 3.2.9
  • Spring Data: 3.4.13
  • Spring Ldap: 3.2.16

❤️ Contributors

Thank you to all the contributors who contributed to this release!


Full change log: v5.2.4...v5.2.5

v6.0.2

Choose a tag to compare

@fmbenhassine fmbenhassine released this 21 Jan 18:26

⭐ New features

  • Add ZonedDateTime and OffsetDateTime support to JobParametersConverter #5178

🐞 Bug fixes

  • Compatibility issues between v5 and v6 when Migrating from CommandLineJobRunner to CommandLineJobOperator #5227
  • MongoStepExecutionDao.countStepExecutions() ignores stepName parameter #5220
  • OptimisticLockingFailureException due to race condition in graceful shutdown #5217
  • ChunkOrientedStep#doExecute updates the StepExecution outside of the chunk transaction boundary. #5199
  • Jackson2ExecutionContextStringSerializer fails to serialize job parameters with JobStep #5191
  • StepContribution counters are not thread-safe during parallel chunk processing #5188
  • ScopeNotActiveException with @StepScope ItemProcessor in Multi-threaded ChunkOrientedStep #5183
  • ChunkOrientedStep updates ExecutionContext even when a chunk fails, leading to data loss on restart #5182
  • MetaDataInstanceFactory default values cause StepContext collision in StepScopeTestUtils when @SpringBatchTest is active #5181
  • Wrong database migration to spring-batch 6.x for DB2LUW #5166
  • OptimisticLockingFailureException in JobRepositoryTestUtils.removeJobExecutions() since Spring Batch 5.2.3 #5161
  • The implementation of jumpToItem(int itemLastIndex) in AbstractPaginatedDataItemReader does not handle restart behavior correctly. #5136
  • Incorrect resource cleanup order in AbstractCursorItemReader#doClose leads to inconsistent behavior #5109
  • Intermittent OptimisticLockingFailureException when starting job using jobOperator.start() with asyncTaskExecutor #5106
  • ClosedChannelException when using StaxEventItemWriter in combination with MultiResourceItemWriter #5098
  • WriteConflict in MongoSequenceIncrementer during parallel job executions #4960

🚀 Enhancements

  • Use Spring Framework's CollectionUtils to create HashSet/HashMap #5175
  • Remove redundant assert in StoredProcedureItemReader #5119

📔 Documentation

  • Fix typo in whatsnew.adoc and in integration tests #5207
  • Clarify ChunkListener changes in v6 #5226
  • Incorrect documentation about concurrent steps in v6 #5228
  • correct JobOperatorFactoryBean sample code #5103

🔨 Tasks

  • Update project template in issue reporting guide #5212

🆙 Dependency Upgrades

Spring Framework: 7.0.3
Spring Integration: 7.0.2
Spring AMQP: 4.0.2
Spring Kafka: 4.0.2
Spring Data: 4.0.2
Micrometer: 1.16.2

❤️ Contributors

Thank you to all the contributors who worked on this release:

@wocks1123, @thswlsqls, @xeounxzxu, @LeeHyungGeol, @KMGeon, @HongYeseul, @banseok1216, @quaff, and @songhees