Releases: spring-projects/spring-batch
v6.0.0-RC1
⭐ New features
- Add support for local chunking #5021
- Add remote step execution support #5024
- Add shutdown hook to gracefully stop job executions on sigterm #5028
- Add support for Jackson 3 #4842
- Support SEDA with Spring Integration
MessageChannels #4719 - Use existing
ItemWriterwithCompositeItemWriterexpecting different item types #4735
🚀 Enhancements
- Missing comma in
StepExecution#getSummary#5025 - Improve performance of
DefaultFieldSet.indexOf()method #4930 - Improve
MessageChannelPartitionHandler::receiveReplies#4776
🐞 Bug fixes
- Spring batch terminate in started status after sigterm #4023
- Jdbc Hibernate Connection closed prematurly when launching a Job #5006
OptimisticLockingFailureExceptioncaused byjobExecutionDao.updateJobExecution(jobExecution)#5022- Missing GraalVM native image hints for
StepContext.getJobParameters()#5041 - StepBuilder(JobRepository) fails due to timing mismatch between constructor validation and BeanNameAware #5027
RecursiveCollectionLineAggregator.aggregate()fails on empty collection input #5023- Incorrect retrieval of last step execution with MongoDB #4896
- Fix potential NPE in
JdbcJobExecutionDao#5044
📖 Documentation updates
- FaultTolerantStepBuilder#skipLimit Javadoc is misleading with custom skipPolicy #4963
- Fix grammar error in testing documentation #4979
- Improve javadoc of
JobInstanceDao#getJobNamesmethod #5043
🆙 Dependency Upgrades
- Spring Framework: 7.0.0-RC1
- Spring Integration: 7.0.0-RC1
- Spring AMQP: 4.0.0-RC1
- Spring Kafka: 4.0.0-RC1
- Spring Data: 4.0.0-RC1
- Spring Ldap: 4.0.0-RC1
- Micrometer: 1.16.0-RC1
❤️ Contributors
Thank you to all the contributors who worked on this release!
Full change log: v6.0.0-M4...v6.0.0-RC1
v5.2.4
🐞 Bug fixes
- Regression: Jdbc Hibernate connection closed prematurely when launching a Job #5006
- Incorrect retrieval of last step execution with MongoDB #4896
RecursiveCollectionLineAggregator.aggregate()fails on empty collection input #5023- Missing GraalVM native image hints for
Job/StepContext.getJobParameters()#5041
🚀 Enhancements
- Improve type conversion in
MessageChannelPartitionHandler#receiveReplies#4776 - Improve performance of
DefaultFieldSet#indexOf()method #4930 - Missing comma in
StepExecution#getSummary#5025
📔 Documentation
FaultTolerantStepBuilder#skipLimitJavadoc is misleading with custom skipPolicy #4963- Fix grammar error in testing documentation #4979
- Improve javadoc of
JobInstanceDao#getJobNamesmethod #5043
🆙 Dependency Upgrades
- Spring Framework: 6.2.12
- Micrometer: 1.14.12
- Spring Integration: 6.4.8
- Spring AMQP: 3.2.8
- Spring Data: 3.4.11
- Spring Ldap: 3.2.15
❤️ Contributors
Thank you to all the contributors who contributed to this release!
Full change log: v5.2.3...v5.2.4
v6.0.0-M4
⭐ New features
- Add ability to configure Mongo sequence incrementers #5018
- Remove usage of Micrometer's global static meter registry #4968
- Migrate to JSpecify annotations for nullability constraints #4673
🚀 Enhancements
- Segregate StepLocator methods in a sub interface #5015
- Move infrastructure APIs under a specific package #5014
- Revisit exception declaration in public APIs #5013
- Move built-in job parameter incrementers to the org.springframework.batch.core.job.parameters package #5011
- Broken encapsulation of job parameter attributes #5010
- Incorrect nullability definition in public APIs input #4989
- Update retrieval methods with clear nullability semantics #4988
- Incorrect default constructor in AbstractStep #4984
- Documentation for disabling spring batch metrics is incomplete #4800
- Make domain model entities immutable #1870
🐞 Bug fixes
- Error in the metrics registration with a meter registry customization #4759
- Activation of Actuator & Prometheus rise a WARN in the log due to bad configuration #4753
🔨 Tasks
- Deprecate JobRepository#getStepExecution(long jobExecutionId, long stepExecutionId) #5007
- Deprecate the batch XML namespace #4843
- Deprecate JUnit 4 support #4816
- Update Micrometer's Prometheus support to version 1.x #4689
❤️ Contributors
Thank you to all the contributors who worked on this release!
Full change log: v6.0.0-M3...v6.0.0-M4
v6.0.0-M3
⭐ New features
- Add support for observability with the Java Flight Recorder #4972
- Add ability to externally stop any kind of step #4965
- Revisit the concurrency model #4955
- Make Job interface a functional interface #4966
- Make Step interface a functional interface #4976
- Add
StepExecutionparameter toStoppableTasklet.stop()#4703
🚀 Enhancements
- Make
JobRegistryoptional in the default batch configuration #4971 - Make transaction manager optional in
JobOperatorFactoryBean#4970 - Make transaction manager optional in Tasklet and Chunk-Oriented steps #4974
🐞 Bug fixes
- Incorrect step execution id generation in
ResourcelessJobRepository#4975 - Conflicting info in
@AfterChunk/@BeforeChunkannotation javadoc to current implementation #4961 RecordFieldSetMapperfails withRecordwithout components #4900
🆙 Dependency Upgrades
- Spring Framework: 7.0.0-M9
- Spring Integration: 7.0.0-M3
- Spring AMQP: 4.0.0-M5
- Spring Kafka: 4.0.0-M5
- Spring Data: 4.0.0-M6
- Spring Ldap: 4.0.0-M3
- Micrometer: 1.16.0-M3
❤️ Contributors
Thank you to all the contributors who worked on this release!
Full change log: v6.0.0-M2...v6.0.0-M3
v5.2.3
🐞 Bug fixes
- Incorrect step execution id generation in
ResourcelessJobRepository#4975 RecordFieldSetMapperfails withRecordwithout components #4900
🚀 Enhancements
- Allow keys other than _id for primary key in
MongoItemWriter#4812 - Add Redis integration tests #4892
- Remove unnecessary reflection in
RemoteChunkHandlerFactoryBean#4839 - Mark argument to
ExitStatus#equalsas nullable #4823 - Use typesafe variant of
ctx::getBeaninstead #4803 - Use
jdbcTemplate.queryForStream().findFirst()where appropriate #4802 - Reuse existing SQL where feasible #4801
- Improve performance of
JdbcStepExecutionDao::getStepExecution#4799 - Add optimistic locking for meta-data deletion #4793
- Improve update sql for optimistic locking #4792
- Polish
SynchronizationManagerSupportto useMap::computeIfAbsent#4786 - Refactor
ExitStatus#isRunningfor type-safety #4783 FlatFileItemReaderBuilder: raise check exception on build #4757
📔 Documentation
- Fix javadoc in
JdbcCursorItemReaderBuilder#4838 - Polish code block style and fix typo in
whatsnew.adoc#4901 - Correct comment in
RemoteChunkingJobFunctionalTests#4822
🆙 Dependency Upgrades
- Spring Framework: 6.2.11
- Spring Retry: 2.0.12
- Micrometer: 1.14.11
- Spring Integration: 6.4.7
- Spring AMQP: 3.2.7
- Spring Kafka: 3.3.10
- Spring Data: 3.4.10
- Spring Ldap: 3.2.14
❤️ Contributors
Thank you to all the contributors who contributed to this release!
Full change log: v5.2.2...v5.2.3
v6.0.0-M2
⭐ New features
- Add API to recover failed job executions #4876
🚀 Enhancements
- Revisit the chunk-oriented processing model implementation #3950
- Allow a StepInterruptionPolicy to be injected through the step builder #1641
🐞 Bug fixes
- Build failure with GraalVM 24 #4937
🆙 Dependency Upgrades
- Spring Framework: 7.0.0-M8
- Spring Integration: 7.0.0-M2
- Spring AMQP: 4.0.0-M4
- Spring Kafka: 4.0.0-M4
- Spring Data: 4.0.0-M5
- Spring Ldap: 4.0.0-M2
- Micrometer: 1.16.0-M2
❤️ Contributors
Thank you to all the contributors who worked on this release:
Full change log: v6.0.0-M1...v6.0.0-M2
v6.0.0-M1
This is the first milestone of Spring Batch 6.0, which is a major release that comes with several new features, enhancements, and bug fixes. Moreover, this release introduces a number of API breaking changes and deprecations. Please refer to the migration guide for the full list of changes.
⭐ New features
- Introduce a modern command line batch operator #4899
- Add ability to use bean names for jobs and steps #4858
- Make
MapJobRegistrysmart enough to auto register jobs defined in the application context #4855 - Make
MessageChannelPartitionHandlerusable with any job repository implementations #4917 - Add optimistic locking for meta-data deletion #4793
🚀 Enhancements
- Improve experience when configuring an alternative
JobRepository#4718 - Improve performance of
JdbcStepExecutionDao::getStepExecution#4799 - Improve update sql for optimistic locking #4792
- Improve
JobOperatorAPI by using domain types instead of primitive types #4845 - Improve
JobOperatorby reducing its scope to job operations only #4833 - Core API simplification #4847
- Move core APIs in dedicated packages #4877
- Move listener APIs under
core.listenerpackage #4867 - Move
core.explorepackage undercore.repository#4827 - Move core partitioning APIs under
org.springframework.batch.core.partition#4849 - Move DAOs implementations to separate packages #4848
- Remove unnecessary generic from
JobKeyGeneratorinterface #4886 - Remove usage of
JobFactoryin `JobRegistry`` #4854 - Remove dependency to
JobExplorerinSimpleJobOperator#4817 - Remove
JobExplorerbean registration from the default batch configuration #4825 - Remove unnecessary reflection in RemoteChunkHandlerFactoryBean #4839
- Rename
SimpleJobOperatortoTaskExecutorJobOperator#4834 - Rename
JobRepositoryFactoryBeantoJdbcJobRepositoryFactoryBean#4829 FlatFileItemReaderBuilder: raise check exception on build #4757- Make
JobOperatorextendJobLauncher#4832 - Make
JobRepositoryextendJobExplorer#4824 - Redundant methods in
JobExplorer/JobInstanceDaoAPIs #4821 - Introduce
ErrorProne, fix compiler warnings #4807 - Add Redis integration tests #4892
- Fail test if no exception is thrown in
testErrorMessageWhenNoLineTokenizerWasProvided#4883 - Refactor AOT proxy hints for better type safety #4881
- Refactor
ExitStatus#isRunningfor type-safety #4783 - Mark argument to
ExitStatus#equalsas nullable #4823 - Use typesafe variant of
ctx::getBeaninstead #4803 - Use
jdbcTemplate.queryForStream().findFirst()where appropriate #4802 - Reuse existing SQL where feasible #4801
🐞 Bug fixes
- Incorrect warning when starting a job with an empty parameters set #4914
- Incorrect handling of job parameters when using a
JobParametersIncrementer#4910 - Write Skip Count Not Updated in Chunk Processing #4514
📔 Documentation
- Polish code block style and fix typo in
whatsnew.adoc#4901 - Fix javadoc in
JdbcCursorItemReaderBuilder#4838 - Correct comment in RemoteChunkingJobFunctionalTests #4822
🔨 Tasks
- Replace usage of
JobExplorerwithJobRepositoryinRemoteStepExecutionAggregator#4928 - Replace usage of
JobExplorerwithJobRepositoryinSystemCommandTasklet#4927 - Replace usage of
JobLauncherwithJobOperatorinJobLaunchingGatewayandJobLaunchingMessageHandler#4924 - Replace usage of
JobLauncherwithJobOperatorinJobStep#4923 - Replace usage of
JobExplorerwithJobRepositoryinStepExecutionRequestHandler#4918 - Rename
JobLauncherTestUtilstoJobOperatorTestUtils#4920 - Rename
JobExplorerFactoryBeantoJdbcJobExplorerFactoryBean#4846 - Deprecate
StepRunner#4921 - Deprecate modular job configuration through
EnableBatchProcessing#4866 - Remove usage of
JobExplorerinBatchIntegrationConfiguration#4919 - Remove deprecated APIs scheduled for removal in v6 #4819
- Update GraalVM runtime hints #4844
🆙 Dependency Upgrades
- Spring Framework: 7.0.0-M7
- Spring Integration: 7.0.0-M1
- Spring AMQP: 4.0.0-M3
- Spring Kafka: 4.0.0-M3
- Spring Data: 4.0.0-M4
- Spring Ldap: 4.0.0-M1
- Spring Retry: 2.0.12
- Micrometer: 1.16.0-M1
❤️ Contributors
Thank you to all the contributors who worked on this release:
@darth-raijin, @itis821, @jbotuck, @martinfrancois, @noojung, @patrickwinti, @quaff, @scordio, @sieunie, @sjiwon, and @therepanic
Full change log: v5.2.2...v6.0.0-M1
v5.2.2
🐞 Bug fixes
SynchronizeStatusinMongoJobExecutionDaois not upgrading the status of theJobExecution#4760@SpringBatchTestwith JUnit@Nestedtriggers new test context creation #4738ExecutionContextdirty flag does not remain true when null is put for a non-existent key #4692ExecutionContextdirty flag is reset by a new put #4685MultiResourceItemWritercreates files with varying line count #1722- Fix index creation statements in MongoDB DDL script #4758
- Attempt to close all delegate readers even when some fail #4764
- Attempt to close all delegate writers even when some fail #4750
🚀 Enhancements
- Add AOT runtime hints for infrastructure artifacts #4785
- Add AOT runtime hints for core listeners #4769
- Use
Files.delete()for better error reporting #4775 - Fix variable usage in
ScriptItemProcessorTestsand include script engine test dependencies #4678 - Add
@FunctionalInterfacetoChunkProcessor#4773
📔 Documentation
- Update usage of deprecated
StepExecutionListenerSupportin documention #4784 - Fix typo in Javadocs of
FlatFileItemWriterBuilder#name(String)#4781 - Fix incorrect Javadocs in remote partitioning setup builders #4778
- Fix wrong statement in Javadoc of SimplePartitioner #4772
- Fix typo in
intercepting-execution.adoc#4766 - Remove outdated
AssertFileusage in section "Validating Output Files" of the reference documentation #4754
🆙 Dependency Upgrades
- Spring Framework: 6.2.4
- Spring Retry: 2.0.11
- Micrometer: 1.14.5
- Spring Integration: 6.4.3
- Spring AMQP: 3.2.4
- Spring Kafka: 3.3.4
- Spring Data: 3.4.4
- Spring Ldap: 3.2.11
❤️ Contributors
Thank you to all the contributors who contributed to this release:
@charlie881007, @GGHDMS, @neoludo, @elimelec, @hpoettker, @pongdangx2, @quaff, @scordio, @yeonnex, and @yoseplee
Full change log: v5.2.1...v5.2.2
v5.1.3
Heads-up: ❗This is the last OSS release of the 5.1.x line ❗Please check the support page.
⭐ New features
- Add DatabaseType POSTGRES for the product name EnterpriseDB #4627
🚀 Enhancements
- Bad performance of
GET_LAST_STEP_EXECUTIONquery on DB2 with largeSTEP_EXECUTIONtable #4657 - Missing
@FunctionalInterfaceinJobKeyGenerator#4613
🐞 Bug fixes
- Different behavior when interrupting a job, depending on the parallel flow order #3939
MongoPagingItemReadernever reset page number #1086- Job restart after stop fails #1287
- Wrong column types in
JdbcStepExecutionDao#4648
📔 Documentation
- Grammatical error in restart.adoc #4600
- Typo in architecture doc #4607
- Typo in the documentation chapter Spring Batch Integration #4649
- Missing documentation about
MultiResourceItemWriternot creating empty files when no data goes through delegates #4645 - Missing note about not scoping Step beans with Job scope #3900
- Unclear documentation about wildcard usage to select input files #4707
- Regression in Javadoc deployment path with 5.1.2 #4604
🆙 Dependency Upgrades
- Spring Framework: 6.1.16
- Spring Retry: 2.0.11
- Micrometer: 1.12.12
- Spring Integration: 6.2.11
- Spring AMQP: 3.1.8
- Spring Kafka: 3.1.10
- Spring Data: 3.2.12
- Spring Ldap: 3.2.9
❤️ Contributors
Thank you to all the contributors who worked on this release!
v5.2.1
🐞 Bug fixes
JobExecution#getJobExecution(@Nullable Long executionId)returnsnullwhen using MongoDB as JobExplorer #4722- Different behavior when interrupting a job, depending on the parallel flow order #3939
MongoPagingItemReadernever reset page number #1086DerbyPagingQueryProviderremaining pages query is not correct #1253- Job restart after stop fails #1287
🚀 Enhancements
- Update
DerbyPagingQueryProviderfor Derby 10.7 and above #1673
📔 Documentation
- Missing note about not scoping Step beans with Job scope #3900
- Repeating 'the the' exists #4615
- Unclear documentation about wildcard usage to select input files #4707
- Incorrect class name and grammatical error in docs whats-new #4720
- Fix link section #4696
- Error in Migration guide #4695
- Incorrect link and closing tag for listeners in documentation #4610
🆙 Dependency Upgrades
- Spring Framework: 6.2.1
- Spring Retry: 2.0.11
- Micrometer: 1.14.2
- Spring Integration: 6.4.1
- Spring AMQP: 3.2.1
- Spring Kafka: 3.3.1
- Spring Data: 3.4.1
- Spring Ldap: 3.2.9
🔨 Tasks
- Deprecate
SqlWindowingPagingQueryProvider#4733
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Seungpang, @Solodye, @ngocnhan-tran1996, @uli-f, and @xeounxzxu