Releases: spring-projects/spring-batch
v5.2.0
⭐ New features
- Add support for MongoDB as JobRepository #877
- Introduce a resourceless job repository implementation #4679
- Add adapters for Java functional interfaces #4672
- Add ability to customize the job parameters converter in the default batch configuration #4650
- Add
CompositeItemReader
analogous toCompositeItemWriter
andCompositeItemProcessor
#757 - Allow dependent steps to start concurrently #2044
- Add blocking queue item reader/writer to enable implementing the staged event-driven architecture in batch jobs #2350
- Add support for data classes in
JdbcCursorItemReaderBuilder
&JdbcPagingItemReaderBuilder
#4578 - Add support for query hints in JPA item readers #4479
- Add possibility to configure line separator in
RecursiveCollectionLineAggregator
#4594 - Add
JobRegistrySmartInitializingSingleton
#4521 - Add DatabaseType
POSTGRES
for the product nameEnterpriseDB
#4627 - Revisit the mechanism of job registration #4547
🐞 Bug fixes
- Incorrect bean configuration in
DefaultBatchConfiguration
#4543 BeanPostProcessorChecker.postProcessAfterInitialization
WARNING after upgrade spring-framework-6.1.0 #4489- Possible duplicate state transitions in flow definition #3674
- Order of Transition Elements Still Does Not completely adhere to documentation #3996
- Memory leak in
MessageChannelPartitionHandler
when polling the database #4598 ListItemWriter<T>::getWrittenItems
has bad wildcard return type #4576SimpleBinaryBufferedReaderFactory
misses line endings #811StepExecution.getEndTime()
returns null inStepExecutionListener.afterStep()
#3846- Default value for
ignoreWarnings
inJdbcCursorItemReaderBuilder
does not align with documentation #4570 - Remote partitioning doesn't work if you're using graalvm #4564
SystemCommandTasklet
does not propagate errors #4483- Incorrect Chunk property value in implementation of
ItemWriter
write method #4560 - Incorrect step configuration when setting the taskExecutor before
faultTolerant()
#4438 - Incorrect deprecation in
MongoPagingItemReader
#4552 JobRepository.deleteJobInstance()
Fails with Foreign Key Constraint Violation if Job Executions have Step Executions #4382DefaultJobParametersConverter
throwsjava.lang.ArrayIndexOutOfBoundsException
if input is empty string #4505- Wrong column types in
JdbcStepExecutionDao
#4648 MongoStepExecutionDao
returns an different stepExecution if a job has multiple steps spring-projects-experimental/spring-batch-experimental/issues/3
🚀 Enhancements
- Bad performance of
GET_LAST_STEP_EXECUTION
query on DB2 with largeSTEP_EXECUTION
table #4657 - Use
Threadlocal.remove()
instead ofThreadlocal.set(null)
#4601 - Performance issue in
DefaultFieldSet
due to the usage ofSimpleDateFormat
#1694 - Improve Error Messages in
JobParametersBuilder
methods #4581 - Implement
jumpToItem
inJsonItemReader
#4557 - Maintain similar ordering of elements between
DefaultStateTransitionComparator
andFlowJobBuilder
#4527 - Avoid collection copying #4553
- Make util classes to follow code style guide #4545
- Use annotation
@Override
consistently #4512 - Check dirty flag of step execution context before update in inner loop #4503
- Missing
@FunctionalInterface
in JobKeyGenerator #4613 - Proper default value for skipLimit #4661
📔 Documentation
- Flow order priority does not match documented behavior #4456
- Incorrect link to batch reference documentation on project page #4637
- Typo in architecture doc #4607
- Grammatical error in restart.adoc #4600
- Incorrect link in appendix #4595
- Missing information about error handling in
ChunkListener
s #4384 - Improve Javadoc regarding the sort order in
RepositoryItemReader
#4462 - Fix code sample that uses deprecated
StepBuilderFactory
#4582 - Misleading documentation on
ItemWriteListener
#4400 - Incorrect code example in documentation #4550
- Reference Documentation Uses Deprecated Class
StepExecutionListenerSupport
#4538 - Incorrect Type of getter in Documentation for
JobParameters#getDouble
#4526 - UI Aligment Issue - Spring Batch Version Number in Docs #4534
- Missing documentation about MultiResourceItemWriter not creating empty files when no data goes through delegates #4645
- Typo in the documentation chapter Spring Batch Integration #4649
🆙 Dependency Upgrades
- Spring Framework: 6.2.0
- Spring Retry: 2.0.10
- Micrometer: 1.14.1
- Spring Integration: 6.4.0
- Spring AMQP: 3.2.0
- Spring Kafka: 3.3.0
- Spring Data: 3.4.0
- Spring Ldap: 3.2.8
🔨 Tasks
- Deprecate the usage of
LobHandler
#4588 - Deprecate
SystemPropertyInitializer
#4680 - Remove deprecated APIs scheduled for removal in v5.2.0 #4398
- Regression in javadocs deployment script #4511
❤️ Contributors
Many thanks to all contributors who worked on this release!
Full change log: v5.1.2...v5.2.0
v5.2.0-RC1
⭐ New features
- Allow Subclasses in the
CompositeItemReader
#4682
🐞 Bug fixes
- Wrong column types in JdbcStepExecutionDao #4648
- MongoStepExecutionDao returns an different stepExecution if a job has multiple steps spring-projects-experimental/spring-batch-experimental/issues/3
🚀 Enhancements
- Missing
@FunctionalInterface
in JobKeyGenerator #4613
📔 Documentation
- Missing documentation about MultiResourceItemWriter not creating empty files when no data goes through delegates #4645
- Typo in the documentation chapter Spring Batch Integration #4649
🆙 Dependency Upgrades
- Spring Framework: 6.2.0-RC2
- Spring Retry: 2.0.10
- Micrometer: 1.14.0-RC1
- Spring Integration: 6.4.0-RC1
- Spring AMQP: 3.2.0-RC1
- Spring Kafka: 3.3.0-RC1
- Spring Data: 3.4.0-RC1
- Spring Ldap: 3.2.7
❤️ Contributors
Many thanks to all contributors who worked on this release!
Full change log: v5.2.0-M2...v5.2.0-RC1
v5.2.0-M2
⭐ New features
-
Add support for MongoDB as JobRepository #877
-
Introduce a resourceless job repository implementation #4679
-
Add adapters for Java functional interfaces #4672
-
Add ability to customize the job parameters converter in the default batch configuration #4650
-
Add DatabaseType
POSTGRES
for the product nameEnterpriseDB
#4627 -
Simple
CompositeItemReader
analogous toCompositeItemWriter
andCompositeItemProcessor
#757 -
Allow dependent steps to start concurrently #2044
-
Add blocking queue item reader/writer to enable implementing the staged event-driven architecture in batch jobs #2350
🚀 Enhancements
- Bad performance of
GET_LAST_STEP_EXECUTION
query on DB2 with largeSTEP_EXECUTION
table #4657
🔨 Tasks
❤️ Contributors
Thank you to all the contributors who worked on this release!
Full change log: v5.2.0-M1...v5.2.0-M2
v5.2.0-M1
⭐ New features
- Add support for data classes in
JdbcCursorItemReaderBuilder
&JdbcPagingItemReaderBuilder
#4578 - Add support for query hints in JPA item readers #4479
- Add possibility to configure line separator in
RecursiveCollectionLineAggregator
#4594 - Revisit the mechanism of job registration #4547
- Add
JobRegistrySmartInitializingSingleton
#4521
🐞 Bug fixes
- Incorrect bean configuration in
DefaultBatchConfiguration
#4543 BeanPostProcessorChecker.postProcessAfterInitialization
WARNING after upgrade spring-framework-6.1.0 #4489- Possible duplicate state transitions in flow definition #3674
- Order of Transition Elements Still Does Not completely adhere to documentation #3996
- Memory leak in
MessageChannelPartitionHandler
when polling the database #4598 ListItemWriter<T>::getWrittenItems
has bad wildcard return type #4576SimpleBinaryBufferedReaderFactory
misses line endings #811StepExecution.getEndTime()
returns null inStepExecutionListener.afterStep()
#3846- Default value for
ignoreWarnings
inJdbcCursorItemReaderBuilder
does not align with documentation #4570 - Remote partitioning doesn't work if you're using graalvm #4564
SystemCommandTasklet
does not propagate errors #4483- Incorrect Chunk property value in implementation of
ItemWriter
write method #4560 - Incorrect step configuration when setting the taskExecutor before
faultTolerant()
#4438 - Incorrect deprecation in
MongoPagingItemReader
#4552 JobRepository.deleteJobInstance()
Fails with Foreign Key Constraint Violation if Job Executions have Step Executions #4382DefaultJobParametersConverter
throwsjava.lang.ArrayIndexOutOfBoundsException
if input is empty string #4505
🚀 Enhancements
- Use
Threadlocal.remove()
instead ofThreadlocal.set(null)
#4601 - Performance issue in
DefaultFieldSet
due to the usage ofSimpleDateFormat
#1694 - Improve Error Messages in
JobParametersBuilder
methods #4581 - Implement
jumpToItem
inJsonItemReader
#4557 - Maintain similar ordering of elements between
DefaultStateTransitionComparator
andFlowJobBuilder
#4527 - Avoid collection copying #4553
- Make util classes to follow code style guide #4545
- Use annotation
@Override
consistently #4512 - Check dirty flag of step execution context before update in inner loop #4503
📔 Documentation
- Flow order priority does not match documented behavior #4456
- Incorrect link to batch reference documentation on project page #4637
- Typo in architecture doc #4607
- Grammatical error in restart.adoc #4600
- Incorrect link in appendix #4595
- Missing information about error handling in
ChunkListener
s #4384 - Improve Javadoc regarding the sort order in
RepositoryItemReader
#4462 - Fix code sample that uses deprecated
StepBuilderFactory
#4582 - Misleading documentation on
ItemWriteListener
#4400 - Incorrect code example in documentation #4550
- Reference Documentation Uses Deprecated Class
StepExecutionListenerSupport
#4538 - Incorrect Type of getter in Documentation for
JobParameters#getDouble
#4526 - UI Aligment Issue - Spring Batch Version Number in Docs #4534
🆙 Dependency Upgrades
- Spring Framework: 6.2.0-RC1
- Spring Retry: 2.0.9
- Micrometer: 1.14.0-M3
- Spring Integration: 6.4.0-M3
- Spring AMQP: 3.2.0-M3
- Spring Kafka: 3.3.0-M3
- Spring Data: 3.4.0-M1
- Spring Ldap: 3.2.6
🔨 Tasks
- Remove deprecated APIs scheduled for removal in v5.2.0 #4398
- Regression in javadocs deployment script #4511
❤️ Contributors
Many thanks to all contributors who worked on this release!
Full change log: v5.1.2...v5.2.0-M1
v5.1.2
🐞 Bug fixes
- Incorrect Chunk property value in implementation of ItemWriter write method #4560
SystemCommandTasklet
does not propagate errors #4483- Remote partitioning doesn't work if you're using graalvm #4564
SimpleBinaryBufferedReaderFactory
misses line endings #811- Memory leak in
MessageChannelPartitionHandler
when polling the database #4598
🚀 Enhancements
- Improve Error Messages in
JobParametersBuilder
methods #4581
📔 Documentation
- Reference Documentation Uses Deprecated Class
StepExecutionListenerSupport
#4538 - Incorrect code example in documentation #4550
- Misleading documentation on
ItemWriteListener
#4400 - Code sample uses deprecated
StepBuilderFactory
#4582 - Typo in java-config.adoc #4591
- Incorrect link in appendix #4595
🆙 Dependency Upgrades
- Spring Framework: 6.1.7
- Spring Retry: 2.0.6
- Micrometer: 1.12.6
- Spring Integration: 6.2.5
- Spring AMQP: 3.1.5
- Spring Kafka: 3.1.5
- Spring Data: 3.2.6
- Spring Ldap: 3.2.3
❤️ Contributors
Thank you to all the contributors who worked on this release!
Full change log: v5.1.1...v5.1.2
v5.0.6
🐞 Bug fixes
- Incorrect Chunk property value in implementation of ItemWriter write method #4560
SystemCommandTasklet
does not propagate errors #4483- Remote partitioning doesn't work if you're using graalvm #4564
SimpleBinaryBufferedReaderFactory
misses line endings #811- Memory leak in
MessageChannelPartitionHandler
when polling the database #4598
🚀 Enhancements
- Improve Error Messages in
JobParametersBuilder
methods #4581
📔 Documentation
- Reference Documentation Uses Deprecated Class
StepExecutionListenerSupport
#4538 - Incorrect code example in documentation #4550
- Misleading documentation on
ItemWriteListener
#4400 - Code sample uses deprecated
StepBuilderFactory
#4582 - Typo in java-config.adoc #4591
🆙 Dependency Upgrades
- Spring Framework: 6.0.20
- Spring Retry: 2.0.6
- Spring AMQP: 3.0.14
- Spring Kafka: 3.0.17
❤️ Contributors
Thank you to all the contributors who worked on this release!
Full change log: v5.0.5...v5.0.6
v5.1.1
⭐ New features
- Add
JobRegistrySmartInitializingSingleton
#4521
🐞 Bug fixes
- Incorrect error message in
JobOperatorFactoryBean
#4528 DefaultJobParametersConverter
throwsjava.lang.ArrayIndexOutOfBoundsException
if input is empty string #4505JobRepository.deleteJobInstance()
Fails with Foreign Key Constraint Violation if Job Executions have Step Executions #4382- Incorrect step configuration when setting the taskExecutor before
faultTolerant()
#4438 - Incorrect deprecation in
MongoPagingItemReader
#4552
🚀 Enhancements
- Check dirty flag of step execution context before update in inner loop #4503
📔 Documentation
- Incorrect Type of getter in Documentation for
JobParameters#getDouble
#4526 - Broken link to Spring Batch docs #4498
- UI Aligment Issue - Spring Batch Version Number in Docs #4534
🆙 Dependency Upgrades
- Spring Framework: 6.1.4
- Spring Retry: 2.0.5
- Spring Integration: 6.2.2
- Spring Data: 3.2.3
- Spring AMQP: 3.1.2
- Spring Kafka: 3.1.2
- Micrometer: 1.12.3
❤️ Contributors
Thank you to all the contributors who worked on this release!
Full change log: v5.1.0...v5.1.1
v5.0.5
🐞 Bug fixes
- Incorrect error message in
JobOperatorFactoryBean
#4528 DefaultJobParametersConverter
throwsjava.lang.ArrayIndexOutOfBoundsException
if input is empty string #4505JobRepository.deleteJobInstance()
Fails with Foreign Key Constraint Violation if Job Executions have Step Executions #4382- Incorrect step configuration when setting the taskExecutor before
faultTolerant()
#4438
🚀 Enhancements
- Check dirty flag of step execution context before update in inner loop #4503
📔 Documentation
- Incorrect Type of getter in Documentation for
JobParameters#getDouble
#4526
🆙 Dependency Upgrades
- Spring Framework: 6.0.17
- Spring Retry: 2.0.5
- Spring AMQP: 3.0.11
- Spring Kafka: 3.0.14
❤️ Contributors
Thank you to all the contributors who worked on this release!
Full change log: v5.0.4...v5.0.5
v5.1.0
⭐ New features
- Add support for Virtual Threads #4399
- Add synchronized decorators for non-stream item readers/writers #4368
- Add option to clear the persistence context in
JpaItemWriter
#804 - Add cursor-based
ItemReader
for MongoDB #4323 - Add support for bulk inserts in
MongoItemWriter
#4149 - Provide accessors in
MongoItemWriter
to facilitate extensions #3973 - Add item reader for Redis #4446
- Add item writer for Redis #3957
- Add ability to start a job flow definition with a decider #4411
- Add support to specify the database type through
EnableBatchProcessing
#4320 - Auto-configure
JobRegistryBeanPostProcessor
withEnableBatchProcessing
andDefaultBatchConfiguration
#4245 - Add support for Java Date and Time API types serialization in
Jackson2ExecutionContextStringSerializer
#3952 - Add option to provide a custom
JobKeyGenerator
inJdbcJobInstanceDao
#3926 - Access to update counts in
JdbcBatchItemWriter
#3829 - Add setter for
ObservationConvention
inStepBuilder
/JobBuilder
#4401
🚀 Enhancements
- Public access to
AbstractItemCountingItemStreamItemReader.getCurrentItemCount
#1639 - Add
java.util.concurrent.ConcurrentHashMap
to the trusted classes list inJackson2ExecutionContextStringSerializer
#4407 - Add
java.sql.Date
to the trusted classes list inJackson2ExecutionContextStringSerializer
#4407 - Auto-detect the class/interface to be mocked #4426
- Inaccurate exception message in
SimpleJobRepository
#4025 - Expose the internal map in
ExecutionContext
as read-only #4004 - Add support for quotes in
DelimitedLineAggregator
#1139 - Provide better error message in
StaxEventItemReader
ifResource
does not exist #1171 - Add getters for DAOs in
SimpleJobExplorer
#1598 - Use separate parameters for short_context length and exit_message length #1617
- Expose
targetObject
andtargetMethod
inAbstractMethodInvokingDelegator
#1786 - Create versions of samples using Java configuration #3663
- Improve the issue reporting process #4329
- Replace deprecated
RetryListenerSupport
#4453 - Use more
SynchronizedItemReader
in tests #4452 - Take care of some deprecations #4454
🐞 Bug fixes
- Invalid migration script for H2 #4390
- Incorrect drop statements in SQLServer DDL script #4373
SplitBuilder.add(Flow)
causes hung execution in some cases #3857- Incorrect thread usage in
SynchronizedItemStreamReaderTests
#837 - Concurrent execution of
FlowJob
may causeFlowExecutionException
#4092 - Switching incrementers causes jobs to have old job parameters #4073
- Missing setter for strict field in
DelimitedBuilder
#809 DefaultJobParametersExtractor
no longer copies keys fromJobParameters
when not contained inExecutionContext
#4458- job scope bean doesn't cleanup in unit test #1288
NullPointerException
inRepeatTemplate#doHandle()
whenunwrapIfRethrown()
returns null if logging in DEBUG #1123- Starting a flow with
Flow#next
makes the first step execute twice #4432
📔 Documentation
- Incorrect Javadoc in
SimpleStepBuilder
#4402 - Document the type and name of the surrounding job in
JobLauncherTestUtils#launchStep
#3825 - Fix typo in
SimpleMailMessageItemWriter
Javadoc #4381 - Fix javadoc errors and warnings #1624
- Migrate documentation to Antora #4422
- Ambiguous description of "Configuring a JobRepository" #4333
- Add Two minutes tutorial to the
README
#4329 - Update the Getting started guide #4329
- Broken code samples in reference documentation for Job/Step beans with v5 API #4406
- Improve developer experience for conditional flows #4460
- Incorrect Javadoc in
DefaultFieldSet
andDefaultFieldSetFactory
#4494 - Incorrect JavaDoc for Methods returning
JobFlowBuilder
inJobBuilder
#4415 - Update documentation about serializable keys in the execution context #4457
- Improve configuration style toggle in documentation #4357
- Improve the getting started experience with Spring Batch #4329
- Reinstate and Update FAQ page #3878
- Outdated Meta-data ERD #4358
- Documentation unclear on how to replace deprecated
AbstractTaskletStepBuilder#throttleLimit
#4389
🔨 Tasks
- Build failure when the default charset of the JVM is not UTF-8 #4417
- Rename
MongoItemReader
toMongoPagingItemReader
#4341 - Deprecate jobRepository method in
JobBuilderHelper
&StepBuilderHelper
#4326 - Add Automatic-Module-Name to
MANIFEST.MF
in all components #867 - Deprecate overrides of
StepBuilderHelper#repository
for removal #4495
🔨 Dependency upgrades
- Spring Framework 6.1.0
- Spring Integration 6.2.0
- Spring Data 3.2.0
- Spring LDAP 3.2.0
- Spring AMQP 3.1.0
- Spring Kafka 3.1.0
- Micrometer 1.12.0
❤️ Contributors
Thank you to all the contributors who worked on this release!
@IlyaNerd, @ParadiseCHOI, @benelog, @rwinch, @cppwfs, @sjh836, @hpoettker, @jwillebrands, @hwan33, @bio-engineer, @injae-kim, @morenomjc, @LichKing-lee, @santfirax, @acktsap, @sukanth, @seonwoo960000, @robertmcnees, @cgrings, @juchanei, @lsq27, @scordio, @CNJingo, @woniper, @pranavjandu
Full change log: v5.0.3...v5.1.0
v5.0.4
🐞 Bug fixes
- Starting a flow with
Flow#next
makes the first step execute twice #4432 DefaultJobParametersExtractor
no longer copies keys fromJobParameters
when not contained inExecutionContext
#4458- job scope bean doesn't cleanup in unit test #1288
NullPointerException
inRepeatTemplate#doHandle()
whenunwrapIfRethrown()
returns null if logging in DEBUG #1123
🚀 Enhancements
- Inaccurate exception message in
SimpleJobRepository
#4025 - Remove unnecessary expressions in
AsyncItemWriter
#4009
📔 Documentation
- Documentation unclear on how to replace deprecated
AbstractTaskletStepBuilder#throttleLimit
#4389 - Outdated Meta-data ERD #4358
- Incorrect JavaDoc for Methods returning
JobFlowBuilder
inJobBuilder
#4415 - Incorrect Javadoc in
DefaultFieldSet
andDefaultFieldSetFactory
#4494 - Update documentation about serializable keys in the execution context #4457
🆙 Dependency Upgrades
- Spring Framework: 6.0.14
- Spring Retry: 2.0.4
- Spring AMQP: 3.0.10
- Spring Data: 3.0.12
- Spring Integration: 6.0.9
- Spring Kafka: 3.0.13
- Spring LDAP: 3.0.6
- Micrometer: 1.10.13
❤️ Contributors
Thank you to all the contributors who worked on this release!
Full change log: v5.0.3...v5.0.4