-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Spring Batch 6.0 Migration Guide
❗ This document is still in progress. We will update it regularly for each milestone version until the GA is released ❗
This document is meant to help you migrate your applications to Spring Batch 6.0. Spring Batch 6 does not change the minimum required Java version which remains Java 17+.
Spring Batch 6 upgrades its Spring dependencies to the following versions:
- Spring Framework 7
- Spring Integration 4
- Spring Data 4
- Spring AMQP 4
- Spring for Apache Kafka 4
- Micrometer 1.15
Before v6, the @EnableBatchProcessing annotation was tied to a JDBC-based infrastructure. This is not the case anymore. Two new annotations have been introduced to configure the underlying job repository: @EnableJdbcJobRepository and EnableMongoJobRepository.
Starting from v6, @EnableBatchProcessing allows you to configure common attributes for the batch infrastructure, while store-specific attributes can be specified with the new dedicated annotations. Here is an example to migrate a JDBC configuration from v5 to v6:
// v5
@EnableBatchProcessing(dataSourceRef = "batchDataSource", taskExecutorRef = "batchTaskExecutor")
class MyJobConfiguration {
@Bean
public Job job(JobRepository jobRepository) {
return new JobBuilder("job", jobRepository)
// job flow omitted
.build();
}
}// v6
@EnableBatchProcessing(taskExecutorRef = "batchTaskExecutor")
@EnableJdbcJobRepository(dataSourceRef = "batchDataSource")
class MyJobConfiguration {
@Bean
public Job job(JobRepository jobRepository) {
return new JobBuilder("job", jobRepository)
// job flow omitted
.build();
}
}Similar to the annotation-based approach, the programmatic model based on DefaultBatchConfiguration has been updated by introducing two new configuration classes to define store-specific attributes: JdbcDefaultBatchConfiguration and MongoDefaultBatchConfiguration.
Here is an example to migrate a JDBC configuration from v5 to v6:
// v5
class MyJobConfiguration extends DefaultBatchConfiguration {
@Bean
public Job job(JobRepository jobRepository) {
return new JobBuilder("job", jobRepository)
// job flow omitted
.build();
}
@Override
protected DataSource getDataSource() {
return new MyBatchDataSource();
}
}// v6
class MyJobConfiguration extends JdbcDefaultBatchConfiguration {
@Bean
public Job job(JobRepository jobRepository) {
return new JobBuilder("job", jobRepository)
// job flow omitted
.build();
}
@Override
protected DataSource getDataSource() {
return new MyBatchDataSource();
}
}- The
DefaultBatchConfigurationnow configures a "resourceless" batch infrastructure (ie aResourcelessJobRepositoryand aResourcelessTransactionManager). This is to remove the need for an additional dependency to an in-memory database for those who do not need batch meta-data. - The configuration of a
JobExplorerbean has been removed. This is due to the fact thatJobRepositorynow extendsJobExplorerand there is no need for aJobExplorerbean anymore, which is now deprecated (See "Deprecated APIs" section). - The configuration of a
JobLauncherhas been replaced with aJobOperator. This is due to the fact thatJobOperatornow extendsJobLauncherand there is no need for aJobLauncherbean anymore, which is now deprecated (See "Deprecated APIs" section). - The configuration of a
JobRegistrySmartInitializingSingletonbean has been removed. TheMapJobRegistryis now smart enough to populate itself with jobs from the application context on startup.JobRegistrySmartInitializingSingletonis now deprecated (See "Deprecated APIs" section).
The following APIs have been deprecated in version 6.0:
-
JobRepositoryFactoryBean: renamed toJdbcRepositoryFactoryBean -
JobExplorerFactoryBean: renamed toJdbcJobExplorerFactoryBean AutomaticJobRegistrarBeanPostProcessorAbstractApplicationContextFactoryApplicationContextFactoryApplicationContextJobFactoryAutomaticJobRegistrarClasspathXmlApplicationContextsFactoryBeanDefaultJobLoaderGenericApplicationContextFactoryJobFactoryRegistrationListenerJobLoaderJobLocatorReferenceJobFactoryJobFactoryJobLocatorListableJobLocatorCommandLineJobRunnerJvmSystemExiterRuntimeExceptionTranslatorSystemExiterTaskExecutorJobLauncherJobLauncherAbstractJobExplorerFactoryBeanJdbcJobExplorerFactoryBeanJobExplorerFactoryBeanMongoJobExplorerFactoryBeanSimpleJobExplorerJobExplorerStepExecutionSimpleCompletionPolicyPropertiesConverter-
JobParametersConverterand all conversion utilities inorg.springframework.batch.core.converter
JobExplorer#isJobInstanceExists(String jobName, JobParameters jobParameters)JobExplorer#findJobExecutions(JobInstance jobInstance)JobExplorer#findJobInstancesByJobName(String jobName, int start, int count)JobExplorer#findJobInstancesByName(String jobName, int start, int count)SimpleJobExplorer#findJobInstancesByJobName(String jobName, int start, int count)JobInstanceDao#findJobInstancesByName(String jobName, final int start, final int count)JdbcJobInstanceDao#findJobInstancesByName(String jobName, final int start, final int count)MongoJobInstanceDao#findJobInstancesByName(String jobName, final int start, final int count)JobOperator#getExecutions(long instanceId)JobOperator#getJobInstances(String jobName, int start, int count)JobOperator#getJobInstance(String jobName, JobParameters jobParameters)JobOperator#getRunningExecutions(String jobName)JobOperator#getParameters(long executionId)JobOperator#getSummary(long executionId)JobOperator#getStepExecutionSummaries(long executionId)JobOperator#start(String jobName, Properties parameters)JobOperator#getJobNamesJobOperator#restart(long executionId)JobOperator#startNextInstance(String jobName)JobOperator#stop(long executionId)JobOperator#abandon(long jobExecutionId)SimpleJobOperator#start(String jobName, Properties parameters)SimpleJobOperator#getJobNamesSimpleJobOperator#restart(long executionId)SimpleJobOperator#startNextInstance(String jobName)SimpleJobOperator#stop(long executionId)SimpleJobOperator#abandon(long jobExecutionId)SimpleJobOperator#getExecutions(long instanceId)SimpleJobOperator#getJobInstances(String jobName, int start, int count)SimpleJobOperator#getJobInstance(String jobName, JobParameters jobParameters)SimpleJobOperator#getRunningExecutions(String jobName)SimpleJobOperator#getParameters(long executionId)SimpleJobOperator#getSummary(long executionId)SimpleJobOperator#getStepExecutionSummaries(long executionId)SimpleJobOperator#setJobParametersConverter(JobParametersConverter jobParametersConverter)DefaultBatchConfiguration#getJobParametersConverter()EnableBatchProcessing#modular
Please refer to the Javadoc of each API for more details about the suggested replacement.
- All APIs under
org.springframework.batch.core.explorepackage have been moved underorg.springframework.batch.core.repository.explore -
JdbcExecutionContextDao,JdbcJobExecutionDao,JdbcJobInstanceDaoandJdbcStepExecutionDaohave been moved fromorg.springframework.batch.core.repository.daotoorg.springframework.batch.core.repository.dao.jdbc -
MongoExecutionContextDao,MongoJobExecutionDao,MongoJobInstanceDao,MongoStepExecutionDaoandMongoSequenceIncrementerhave been moved fromorg.springframework.batch.core.repository.daotoorg.springframework.batch.core.repository.dao.mongo -
Partitioner,PartitionNameProvider,PartitionStepandStepExecutionAggregatorhave been moved fromorg.springframework.batch.core.partition.supporttoorg.springframework.batch.core.partition -
ChunkListener,ItemProcessListener,ItemReadListener,ItemWriteListener,JobExecutionListener,SkipListener,StepExecutionListenerandStepListenerhave been moved fromorg.springframework.batch.coretoorg.springframework.batch.core.listener -
Job,JobExecution,JobExecutionException,JobInstance,JobInterruptedException,JobKeyGenerator,DefaultJobKeyGenerator,StartLimitExceededExceptionandUnexpectedJobExecutionExceptionhave been moved fromorg.springframework.batch.coretoorg.springframework.batch.core.job -
CompositeJobParametersValidator,DefaultJobParametersValidator,JobParameter,JobParameters,JobParametersBuilder,JobParametersIncrementer,JobParametersInvalidExceptionandJobParametersValidatorhave been moved fromorg.springframework.batch.coretoorg.springframework.batch.core.job.parameters -
Step,StepContributionandStepExecutionhave been moved fromorg.springframework.batch.coretoorg.springframework.batch.core.step
The following APIs were deprecated in previous versions and have been removed in this release:
- method
org.springframework.batch.core.configuration.support.DefaultBatchConfiguration#getLobHandler - Attribute
lobHandlerRefin@EnableBatchProcessing - Attribute
lob-handlerin XML elementstep - method
org.springframework.batch.core.repository.dao.JdbcExecutionContextDao#setLobHandler - method
org.springframework.batch.core.repository.dao.JdbcJobInstanceDao#setJobIncrementer - method
org.springframework.batch.core.repository.support.JobRepositoryFactoryBean#setLobHandler - method
org.springframework.batch.core.configuration.support.DefaultBatchConfiguration#jobLauncher - method
org.springframework.batch.core.configuration.support.DefaultBatchConfiguration#jobOperator - method
org.springframework.batch.core.configuration.support.DefaultBatchConfiguration#jobRegistryBeanPostProcessor - class
org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor - method
org.springframework.batch.core.explore.support.JobExplorerFactoryBean#setLobHandler - constructor
org.springframework.batch.core.job.builder.JobBuilder#JobBuilder(String name) - class
org.springframework.batch.core.listener.ChunkListenerSupport - class
org.springframework.batch.core.listener.JobExecutionListenerSupport - class
org.springframework.batch.core.listener.SkipListenerSupport - class
org.springframework.batch.core.listener.StepExecutionListenerSupport - method
org.springframework.batch.core.step.builder.AbstractTaskletStepBuilder#throttleLimit - constructor
org.springframework.batch.core.step.builder.StepBuilder#StepBuilder(String name) - method
org.springframework.batch.core.step.builder.TaskletStepBuilder#tasklet(Tasklet tasklet) - method
org.springframework.batch.core.step.factory.SimpleStepFactoryBean#setThrottleLimit - classes
org.springframework.batch.item.data.MongoItemReaderandorg.springframework.batch.item.data.builder.MongoItemReaderBuilder - method
org.springframework.batch.item.data.MongoItemWriter#setDelete - method
org.springframework.batch.item.data.builder.MongoItemWriterBuilder#delete(boolean delete) - class
org.springframework.batch.item.data.Neo4jItemReaderandorg.springframework.batch.item.data.Neo4jItemWriter - method
org.springframework.batch.item.database.support.SqlPagingQueryUtils#generateLimitGroupedSqlQuery(AbstractSqlPagingQueryProvider provider, boolean remainingPageQuery, String limitClause) - class
org.springframework.batch.item.database.support.SqlWindowingPagingQueryProvider - class
org.springframework.batch.repeat.listener.RepeatListenerSupport - method
org.springframework.batch.repeat.support.TaskExecutorRepeatTemplate#setThrottleLimit - class
org.springframework.batch.support.SystemPropertyInitializer - constructor
org.springframework.batch.integration.chunk.RemoteChunkingManagerStepBuilder#RemoteChunkingManagerStepBuilder(String stepName) - method
org.springframework.batch.integration.chunk.RemoteChunkingManagerStepBuilder#RemoteChunkingManagerStepBuilder repository(JobRepository jobRepository) - constructor
org.springframework.batch.integration.partition.RemotePartitioningManagerStepBuilder#RemotePartitioningManagerStepBuilder(String stepName) - constructor
org.springframework.batch.integration.partition.RemotePartitioningWorkerStepBuilder#RemotePartitioningWorkerStepBuilder(String name) - method
org.springframework.batch.integration.partition.RemotePartitioningWorkerStepBuilder#RemotePartitioningWorkerStepBuilder repository(JobRepository jobRepository) - method
org.springframework.batch.integration.partition.RemotePartitioningWorkerStepBuilder#tasklet(Tasklet tasklet) - method
org.springframework.batch.integration.partition.RemotePartitioningWorkerStepBuilder#chunk(CompletionPolicy completionPolicy)