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 by- jobExecutionDao.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 with- Recordwithout 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 with- Recordwithout 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
- SynchronizeStatusin- MongoJobExecutionDaois not upgrading the status of the- JobExecution#4760
- @SpringBatchTestwith JUnit- @Nestedtriggers new test context creation #4738
- ExecutionContextdirty flag does not remain true when null is put for a non-existent key #4692
- ExecutionContextdirty flag is reset by a new put #4685
- MultiResourceItemWritercreates 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)returns- nullwhen using MongoDB as JobExplorer #4722
- Different behavior when interrupting a job, depending on the parallel flow order #3939
- MongoPagingItemReadernever reset page number #1086
- DerbyPagingQueryProviderremaining 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