Remove deprecated APIs scheduled for removal in v6

Resolves #4819
This commit is contained in:
Mahmoud Ben Hassine
2025-04-29 08:57:30 +02:00
parent 9d38aceade
commit 43ac1f12cf
79 changed files with 1635 additions and 3694 deletions

View File

@@ -111,11 +111,6 @@ class BatchRegistrar implements ImportBeanDefinitionRegistrar {
beanDefinitionBuilder.addPropertyReference("serializer", executionContextSerializerRef);
}
String lobHandlerRef = batchAnnotation.lobHandlerRef();
if (registry.containsBeanDefinition(lobHandlerRef)) {
beanDefinitionBuilder.addPropertyReference("lobHandler", lobHandlerRef);
}
String conversionServiceRef = batchAnnotation.conversionServiceRef();
if (registry.containsBeanDefinition(conversionServiceRef)) {
beanDefinitionBuilder.addPropertyReference("conversionService", conversionServiceRef);
@@ -178,11 +173,6 @@ class BatchRegistrar implements ImportBeanDefinitionRegistrar {
beanDefinitionBuilder.addPropertyReference("serializer", executionContextSerializerRef);
}
String lobHandlerRef = batchAnnotation.lobHandlerRef();
if (registry.containsBeanDefinition(lobHandlerRef)) {
beanDefinitionBuilder.addPropertyReference("lobHandler", lobHandlerRef);
}
String conversionServiceRef = batchAnnotation.conversionServiceRef();
if (registry.containsBeanDefinition(conversionServiceRef)) {
beanDefinitionBuilder.addPropertyReference("conversionService", conversionServiceRef);

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2024 the original author or authors.
* Copyright 2012-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -238,14 +238,6 @@ public @interface EnableBatchProcessing {
*/
String jobKeyGeneratorRef() default "jobKeyGenerator";
/**
* The large object handler to use in job repository and job explorer.
* @return the bean name of the lob handler to use. Defaults to {@literal lobHandler}.
* @deprecated Since 5.2 with no replacement. Scheduled for removal in v6
*/
@Deprecated(since = "5.2.0", forRemoval = true)
String lobHandlerRef() default "lobHandler";
/**
* The type of large objects.
* @return the type of large objects.

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2024 the original author or authors.
* Copyright 2012-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -67,8 +67,6 @@ import org.springframework.jdbc.core.JdbcOperations;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.MetaDataAccessException;
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
import org.springframework.jdbc.support.lob.DefaultLobHandler;
import org.springframework.jdbc.support.lob.LobHandler;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.Isolation;
@@ -85,7 +83,8 @@ import org.springframework.transaction.annotation.Isolation;
* <li>a {@link JobLauncher} named "jobLauncher"</li>
* <li>a {@link JobRegistry} named "jobRegistry"</li>
* <li>a {@link JobOperator} named "JobOperator"</li>
* <li>a {@link JobRegistryBeanPostProcessor} named "jobRegistryBeanPostProcessor"</li>
* <li>a {@link JobRegistrySmartInitializingSingleton} named
* "jobRegistrySmartInitializingSingleton"</li>
* <li>a {@link org.springframework.batch.core.scope.StepScope} named "stepScope"</li>
* <li>a {@link org.springframework.batch.core.scope.JobScope} named "jobScope"</li>
* </ul>
@@ -137,7 +136,6 @@ public class DefaultBatchConfiguration implements ApplicationContextAware {
jobRepositoryFactoryBean.setSerializer(getExecutionContextSerializer());
jobRepositoryFactoryBean.setConversionService(getConversionService());
jobRepositoryFactoryBean.setJdbcOperations(getJdbcOperations());
jobRepositoryFactoryBean.setLobHandler(getLobHandler());
jobRepositoryFactoryBean.setCharset(getCharset());
jobRepositoryFactoryBean.setMaxVarCharLength(getMaxVarCharLength());
jobRepositoryFactoryBean.setIsolationLevelForCreateEnum(getIsolationLevelForCreate());
@@ -150,17 +148,6 @@ public class DefaultBatchConfiguration implements ApplicationContextAware {
}
}
/**
* Define a job launcher.
* @return a job launcher
* @throws BatchConfigurationException if unable to configure the default job launcher
* @deprecated Since 5.2. Use {@link #jobLauncher(JobRepository)} instead
*/
@Deprecated(forRemoval = true)
public JobLauncher jobLauncher() throws BatchConfigurationException {
return jobLauncher(jobRepository());
}
/**
* Define a job launcher bean.
* @param jobRepository the job repository
@@ -191,7 +178,6 @@ public class DefaultBatchConfiguration implements ApplicationContextAware {
jobExplorerFactoryBean.setJobKeyGenerator(getJobKeyGenerator());
jobExplorerFactoryBean.setCharset(getCharset());
jobExplorerFactoryBean.setTablePrefix(getTablePrefix());
jobExplorerFactoryBean.setLobHandler(getLobHandler());
jobExplorerFactoryBean.setConversionService(getConversionService());
jobExplorerFactoryBean.setSerializer(getExecutionContextSerializer());
try {
@@ -208,18 +194,6 @@ public class DefaultBatchConfiguration implements ApplicationContextAware {
return new MapJobRegistry();
}
/**
* Define a job operator.
* @return a job operator
* @throws BatchConfigurationException if unable to configure the default job operator
* @deprecated Since 5.2. Use
* {@link #jobOperator(JobRepository, JobExplorer, JobRegistry, JobLauncher)} instead
*/
@Deprecated(forRemoval = true)
public JobOperator jobOperator() throws BatchConfigurationException {
return jobOperator(jobRepository(), jobExplorer(), jobRegistry(), jobLauncher());
}
/**
* Define a job operator bean.
* @param jobRepository a job repository
@@ -249,26 +223,6 @@ public class DefaultBatchConfiguration implements ApplicationContextAware {
}
}
/**
* Defines a {@link JobRegistryBeanPostProcessor}.
* @return a {@link JobRegistryBeanPostProcessor}
* @throws BatchConfigurationException if unable to register the bean
* @since 5.1
* @deprecated Use {@link #jobRegistrySmartInitializingSingleton(JobRegistry)} instead
*/
@Deprecated(forRemoval = true)
public JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor() throws BatchConfigurationException {
JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor = new JobRegistryBeanPostProcessor();
jobRegistryBeanPostProcessor.setJobRegistry(jobRegistry());
try {
jobRegistryBeanPostProcessor.afterPropertiesSet();
return jobRegistryBeanPostProcessor;
}
catch (Exception e) {
throw new BatchConfigurationException("Unable to configure the default job registry BeanPostProcessor", e);
}
}
/**
* Define a {@link JobRegistrySmartInitializingSingleton} bean.
* @param jobRegistry the job registry to populate
@@ -388,17 +342,6 @@ public class DefaultBatchConfiguration implements ApplicationContextAware {
return StandardCharsets.UTF_8;
}
/**
* A special handler for large objects. The default is usually fine, except for some
* (usually older) versions of Oracle.
* @return the {@link LobHandler} to use
* @deprecated Since 5.2 with no replacement. Scheduled for removal in v6
*/
@Deprecated(since = "5.2.0", forRemoval = true)
protected LobHandler getLobHandler() {
return new DefaultLobHandler();
}
/**
* Return the {@link JdbcOperations}. If this property is not overridden, a new
* {@link JdbcTemplate} will be created for the configured data source by default.

View File

@@ -1,176 +0,0 @@
/*
* Copyright 2006-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.batch.core.configuration.support;
import java.util.Collection;
import java.util.HashSet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.configuration.DuplicateJobException;
import org.springframework.batch.core.configuration.JobLocator;
import org.springframework.batch.core.configuration.JobRegistry;
import org.springframework.beans.BeansException;
import org.springframework.beans.FatalBeanException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.util.Assert;
/**
* A {@link BeanPostProcessor} that registers {@link Job} beans with a
* {@link JobRegistry}. Include a bean of this type along with your job configuration and
* use the same {@link JobRegistry} as a {@link JobLocator} when you need to locate a
* {@link Job} to launch.
* <p>
* An alternative to this class is {@link JobRegistrySmartInitializingSingleton}, which is
* recommended in cases where this class may cause early bean initializations. You must
* include at most one of either of them as a bean.
*
* @deprecated since 5.2 in favor of {@link JobRegistrySmartInitializingSingleton}.
* @author Dave Syer
* @author Mahmoud Ben Hassine
*
*/
@Deprecated(since = "5.2")
public class JobRegistryBeanPostProcessor
implements BeanPostProcessor, BeanFactoryAware, InitializingBean, DisposableBean {
private static final Log logger = LogFactory.getLog(JobRegistryBeanPostProcessor.class);
// It doesn't make sense for this to have a default value...
private JobRegistry jobRegistry = null;
private final Collection<String> jobNames = new HashSet<>();
private String groupName = null;
private DefaultListableBeanFactory beanFactory;
/**
* The group name for jobs registered by this component. Optional (defaults to null,
* which means that jobs are registered with their bean names). Useful where there is
* a hierarchy of application contexts all contributing to the same
* {@link JobRegistry}: child contexts can then define an instance with a unique group
* name to avoid clashes between job names.
* @param groupName the groupName to set
*/
public void setGroupName(String groupName) {
this.groupName = groupName;
}
/**
* Injection setter for {@link JobRegistry}.
* @param jobRegistry the jobConfigurationRegistry to set
*/
public void setJobRegistry(JobRegistry jobRegistry) {
this.jobRegistry = jobRegistry;
}
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
if (beanFactory instanceof DefaultListableBeanFactory) {
this.beanFactory = (DefaultListableBeanFactory) beanFactory;
}
}
/**
* Make sure the registry is set before use.
*
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
@Override
public void afterPropertiesSet() throws Exception {
Assert.state(jobRegistry != null, "JobRegistry must not be null");
}
/**
* Unregister all the {@link Job} instances that were registered by this post
* processor.
* @see org.springframework.beans.factory.DisposableBean#destroy()
*/
@Override
public void destroy() throws Exception {
for (String name : jobNames) {
if (logger.isDebugEnabled()) {
logger.debug("Unregistering job: " + name);
}
jobRegistry.unregister(name);
}
jobNames.clear();
}
/**
* If the bean is an instance of {@link Job}, then register it.
* @throws FatalBeanException if there is a {@link DuplicateJobException}.
*
* @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization(java.lang.Object,
* java.lang.String)
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof Job job) {
try {
String groupName = this.groupName;
if (beanFactory != null && beanFactory.containsBean(beanName)) {
groupName = getGroupName(beanFactory.getBeanDefinition(beanName), job);
}
job = groupName == null ? job : new GroupAwareJob(groupName, job);
ReferenceJobFactory jobFactory = new ReferenceJobFactory(job);
String name = jobFactory.getJobName();
if (logger.isDebugEnabled()) {
logger.debug("Registering job: " + name);
}
jobRegistry.register(jobFactory);
jobNames.add(name);
}
catch (DuplicateJobException e) {
throw new FatalBeanException("Cannot register job configuration", e);
}
return job;
}
return bean;
}
/**
* Determine a group name for the job to be registered. The default implementation
* returns the {@link #setGroupName(String) groupName} configured. Provides an
* extension point for specialised subclasses.
* @param beanDefinition the bean definition for the job
* @param job the job
* @return a group name for the job (or null if not needed)
*/
protected String getGroupName(BeanDefinition beanDefinition, Job job) {
return groupName;
}
/**
* Do nothing.
*
* @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization(java.lang.Object,
* java.lang.String)
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2024 the original author or authors.
* Copyright 2024-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -42,9 +42,6 @@ import org.springframework.util.Assert;
* {@link JobRegistry}. Include a bean of this type along with your job configuration and
* use the same {@link JobRegistry} as a {@link JobLocator} when you need to locate a
* {@link Job} to launch.
* <p>
* This class is an alternative to {@link JobRegistryBeanPostProcessor} and prevents early
* bean initializations. You must include at most one of either of them as a bean.
*
* @author Henning Pöttker
* @since 5.1.1

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2022 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -77,8 +77,6 @@ public class JobRepositoryParser extends AbstractSingleBeanDefinitionParser {
String maxVarCharLength = element.getAttribute("max-varchar-length");
String lobHandler = element.getAttribute("lob-handler");
String serializer = element.getAttribute("serializer");
String conversionService = element.getAttribute("conversion-service");
@@ -97,9 +95,6 @@ public class JobRepositoryParser extends AbstractSingleBeanDefinitionParser {
if (StringUtils.hasText(tablePrefix)) {
builder.addPropertyValue("tablePrefix", tablePrefix);
}
if (StringUtils.hasText(lobHandler)) {
builder.addPropertyReference("lobHandler", lobHandler);
}
if (StringUtils.hasText(maxVarCharLength)) {
builder.addPropertyValue("maxVarCharLength", maxVarCharLength);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2023 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -185,8 +185,6 @@ public class StepParserStepFactoryBean<I, O> implements FactoryBean<Step>, BeanN
private TaskExecutor taskExecutor;
private Integer throttleLimit;
private ItemReader<? extends I> itemReader;
private ItemProcessor<? super I, ? extends O> itemProcessor;
@@ -473,9 +471,6 @@ public class StepParserStepFactoryBean<I, O> implements FactoryBean<Step>, BeanN
}
builder.taskExecutor(taskExecutor);
if (throttleLimit != null) {
builder.throttleLimit(throttleLimit);
}
builder.transactionManager(transactionManager);
if (transactionTimeout != null || propagation != null || isolation != null
|| noRollbackExceptionClasses != null) {
@@ -992,19 +987,6 @@ public class StepParserStepFactoryBean<I, O> implements FactoryBean<Step>, BeanN
this.taskExecutor = taskExecutor;
}
/**
* Public setter for the throttle limit. This limits the number of tasks queued for
* concurrent processing to prevent thread pools from being overwhelmed. Defaults to
* {@link TaskExecutorRepeatTemplate#DEFAULT_THROTTLE_LIMIT}.
* @param throttleLimit The throttle limit to set.
* @deprecated since 5.0, scheduled for removal in 6.0. This API is not intended for
* end users anyway. It is only used by the XML namespace parser.
*/
@Deprecated(since = "5.0", forRemoval = true)
public void setThrottleLimit(Integer throttleLimit) {
this.throttleLimit = throttleLimit;
}
/**
* @param itemReader The {@link ItemReader} to set.
*/

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2024 the original author or authors.
* Copyright 2002-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -51,7 +51,6 @@ import org.springframework.jdbc.core.JdbcOperations;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.incrementer.AbstractDataFieldMaxValueIncrementer;
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
import org.springframework.jdbc.support.lob.LobHandler;
import org.springframework.lang.NonNull;
import org.springframework.util.Assert;
@@ -81,8 +80,6 @@ public class JobExplorerFactoryBean extends AbstractJobExplorerFactoryBean imple
private JobKeyGenerator jobKeyGenerator;
private LobHandler lobHandler;
private ExecutionContextSerializer serializer;
private Charset charset = StandardCharsets.UTF_8;
@@ -138,18 +135,6 @@ public class JobExplorerFactoryBean extends AbstractJobExplorerFactoryBean imple
this.jobKeyGenerator = jobKeyGenerator;
}
/**
* The lob handler to use when saving {@link ExecutionContext} instances. Defaults to
* {@code null}, which works for most databases.
* @param lobHandler Large object handler for saving an
* {@link org.springframework.batch.item.ExecutionContext}.
* @deprecated Since 5.2 with no replacement. Scheduled for removal in v6
*/
@Deprecated(since = "5.2.0", forRemoval = true)
public void setLobHandler(LobHandler lobHandler) {
this.lobHandler = lobHandler;
}
/**
* Sets the {@link Charset} to use when deserializing the execution context. Defaults
* to "UTF-8". Must not be {@code null}.
@@ -210,7 +195,6 @@ public class JobExplorerFactoryBean extends AbstractJobExplorerFactoryBean imple
protected ExecutionContextDao createExecutionContextDao() throws Exception {
JdbcExecutionContextDao dao = new JdbcExecutionContextDao();
dao.setJdbcTemplate(jdbcOperations);
dao.setLobHandler(lobHandler);
dao.setTablePrefix(tablePrefix);
dao.setSerializer(serializer);
dao.setCharset(charset);

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2023 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -30,16 +30,6 @@ import org.springframework.batch.core.repository.JobRepository;
*/
public class JobBuilder extends JobBuilderHelper<JobBuilder> {
/**
* Create a new builder for a job with the given name.
* @param name the name of the job
* @deprecated use {@link JobBuilder#JobBuilder(String, JobRepository)}
*/
@Deprecated(since = "5.0", forRemoval = true)
public JobBuilder(String name) {
super(name);
}
/**
* Create a new builder for a job with the given name.
* @param name the name of the job

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2023 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -54,17 +54,6 @@ public abstract class JobBuilderHelper<B extends JobBuilderHelper<B>> {
private final CommonJobProperties properties;
/**
* Create a new {@link JobBuilderHelper}.
* @param name the job name
* @deprecated use {@link JobBuilderHelper#JobBuilderHelper(String, JobRepository)}
*/
@Deprecated(since = "5.1", forRemoval = true)
public JobBuilderHelper(String name) {
this.properties = new CommonJobProperties();
properties.name = name;
}
/**
* Create a new {@link JobBuilderHelper}.
* @param name the job name
@@ -110,20 +99,6 @@ public abstract class JobBuilderHelper<B extends JobBuilderHelper<B>> {
return result;
}
/**
* Sets the job repository for the job.
* @param jobRepository the job repository (mandatory)
* @return this to enable fluent chaining
* @deprecated use {@link JobBuilderHelper#JobBuilderHelper(String, JobRepository)}
*/
@Deprecated(since = "5.1", forRemoval = true)
public B repository(JobRepository jobRepository) {
properties.jobRepository = jobRepository;
@SuppressWarnings("unchecked")
B result = (B) this;
return result;
}
/**
* Sets the job observation convention.
* @param observationConvention the job observation convention (optional)

View File

@@ -1,43 +0,0 @@
/*
* Copyright 2006-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.batch.core.listener;
import org.springframework.batch.core.ChunkListener;
import org.springframework.batch.core.scope.context.ChunkContext;
/**
* Basic support implementation of {@link ChunkListener}
*
* @author Lucas Ward
* @author Michael Minella
* @deprecated as of 5.0, in favor of the default methods on the {@link ChunkListener}
*/
@Deprecated
public class ChunkListenerSupport implements ChunkListener {
@Override
public void afterChunk(ChunkContext context) {
}
@Override
public void beforeChunk(ChunkContext context) {
}
@Override
public void afterChunkError(ChunkContext context) {
}
}

View File

@@ -1,37 +0,0 @@
/*
* Copyright 2006-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.batch.core.listener;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobExecutionListener;
/**
* @author Dave Syer
* @deprecated as of 5.0, in favor of the default methods on the
* {@link JobExecutionListener}
*/
@Deprecated
public class JobExecutionListenerSupport implements JobExecutionListener {
@Override
public void afterJob(JobExecution jobExecution) {
}
@Override
public void beforeJob(JobExecution jobExecution) {
}
}

View File

@@ -1,43 +0,0 @@
/*
* Copyright 2006-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.batch.core.listener;
import org.springframework.batch.core.SkipListener;
/**
* Basic no-op implementations of all {@link SkipListener} implementations.
*
* @author Dave Syer
* @author Mahmoud Ben Hassine
* @deprecated as of v5.0 in favor of the default methods in {@link SkipListener}.
*
*/
@Deprecated
public class SkipListenerSupport<T, S> implements SkipListener<T, S> {
@Override
public void onSkipInRead(Throwable t) {
}
@Override
public void onSkipInWrite(S item, Throwable t) {
}
@Override
public void onSkipInProcess(T item, Throwable t) {
}
}

View File

@@ -1,41 +0,0 @@
/*
* Copyright 2006-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.batch.core.listener;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.StepExecutionListener;
import org.springframework.lang.Nullable;
/**
* @author Dave Syer
* @deprecated as of 5.0, in favor of the default methods on the
* {@link StepExecutionListener}
*/
@Deprecated
public class StepExecutionListenerSupport implements StepExecutionListener {
@Nullable
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
return null;
}
@Override
public void beforeStep(StepExecution stepExecution) {
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2024 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -40,8 +40,6 @@ import org.springframework.batch.item.ExecutionContext;
import org.springframework.core.serializer.Serializer;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.lob.DefaultLobHandler;
import org.springframework.jdbc.support.lob.LobHandler;
import org.springframework.lang.NonNull;
import org.springframework.util.Assert;
@@ -110,8 +108,6 @@ public class JdbcExecutionContextDao extends AbstractJdbcBatchMetadataDao implem
private int shortContextLength = DEFAULT_MAX_VARCHAR_LENGTH;
private LobHandler lobHandler = new DefaultLobHandler();
private ExecutionContextSerializer serializer = new DefaultExecutionContextSerializer();
private final Lock lock = new ReentrantLock();
@@ -268,15 +264,6 @@ public class JdbcExecutionContextDao extends AbstractJdbcBatchMetadataDao implem
getJdbcTemplate().update(getQuery(DELETE_STEP_EXECUTION_CONTEXT), stepExecution.getId());
}
/**
* @deprecated Since 5.2 with no replacement. Scheduled for removal in v6
* @param lobHandler the lob handler to use
*/
@Deprecated(since = "5.2.0", forRemoval = true)
public void setLobHandler(LobHandler lobHandler) {
this.lobHandler = lobHandler;
}
@Override
public void afterPropertiesSet() throws Exception {
super.afterPropertiesSet();
@@ -306,7 +293,7 @@ public class JdbcExecutionContextDao extends AbstractJdbcBatchMetadataDao implem
getJdbcTemplate().update(getQuery(sql), ps -> {
ps.setString(1, shortContext);
if (longContext != null) {
lobHandler.getLobCreator().setClobAsString(ps, 2, longContext);
ps.setString(2, longContext);
}
else {
ps.setNull(2, getClobTypeToUse());
@@ -342,7 +329,7 @@ public class JdbcExecutionContextDao extends AbstractJdbcBatchMetadataDao implem
}
ps.setString(1, shortContext);
if (longContext != null) {
lobHandler.getLobCreator().setClobAsString(ps, 2, longContext);
ps.setString(2, longContext);
}
else {
ps.setNull(2, getClobTypeToUse());

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2023 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -284,17 +284,6 @@ public class JdbcJobInstanceDao extends AbstractJdbcBatchMetadataDao implements
getJdbcTemplate().update(getQuery(DELETE_JOB_INSTANCE), jobInstance.getId());
}
/**
* Setter for {@link DataFieldMaxValueIncrementer} to be used when generating primary
* keys for {@link JobInstance} instances.
* @param jobIncrementer the {@link DataFieldMaxValueIncrementer}
* @deprecated as of v5.0 in favor of using the {@link #setJobInstanceIncrementer}
*/
@Deprecated
public void setJobIncrementer(DataFieldMaxValueIncrementer jobIncrementer) {
this.setJobInstanceIncrementer(jobIncrementer);
}
/**
* Setter for {@link DataFieldMaxValueIncrementer} to be used when generating primary
* keys for {@link JobInstance} instances.

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2024 the original author or authors.
* Copyright 2002-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -56,8 +56,6 @@ import org.springframework.core.convert.support.ConfigurableConversionService;
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.jdbc.core.JdbcOperations;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.lob.DefaultLobHandler;
import org.springframework.jdbc.support.lob.LobHandler;
import org.springframework.lang.NonNull;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
@@ -95,8 +93,6 @@ public class JobRepositoryFactoryBean extends AbstractJobRepositoryFactoryBean i
private int maxVarCharLengthForShortContext = AbstractJdbcBatchMetadataDao.DEFAULT_SHORT_CONTEXT_LENGTH;
private LobHandler lobHandler;
private ExecutionContextSerializer serializer;
private Integer clobType;
@@ -124,19 +120,6 @@ public class JobRepositoryFactoryBean extends AbstractJobRepositoryFactoryBean i
this.serializer = serializer;
}
/**
* A special handler for large objects. The default is usually fine, except for some
* (usually older) versions of Oracle. The default is determined from the data base
* type.
* @param lobHandler the {@link LobHandler} to set
* @deprecated Since 5.2 with no replacement. Scheduled for removal in v6
* @see LobHandler
*/
@Deprecated(since = "5.2.0", forRemoval = true)
public void setLobHandler(LobHandler lobHandler) {
this.lobHandler = lobHandler;
}
/**
* Public setter for the length of long string columns in database. Do not set this if
* you haven't modified the schema. Note this value will be used for the exit message
@@ -276,10 +259,6 @@ public class JobRepositoryFactoryBean extends AbstractJobRepositoryFactoryBean i
}
}
if (lobHandler == null && databaseType.equalsIgnoreCase(DatabaseType.ORACLE.toString())) {
lobHandler = new DefaultLobHandler();
}
if (serializer == null) {
serializer = new DefaultExecutionContextSerializer();
}
@@ -355,10 +334,6 @@ public class JobRepositoryFactoryBean extends AbstractJobRepositoryFactoryBean i
dao.setSerializer(serializer);
dao.setCharset(charset);
if (lobHandler != null) {
dao.setLobHandler(lobHandler);
}
dao.afterPropertiesSet();
dao.setShortContextLength(this.maxVarCharLengthForShortContext);
return dao;

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2024 the original author or authors.
* Copyright 2012-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -67,8 +67,6 @@ public abstract class AbstractTaskletStepBuilder<B extends AbstractTaskletStepBu
private ExceptionHandler exceptionHandler = new DefaultExceptionHandler();
private int throttleLimit = TaskExecutorRepeatTemplate.DEFAULT_THROTTLE_LIMIT;
private TaskExecutor taskExecutor;
public AbstractTaskletStepBuilder(StepBuilderHelper<?> parent) {
@@ -88,7 +86,6 @@ public abstract class AbstractTaskletStepBuilder<B extends AbstractTaskletStepBu
this.transactionAttribute = parent.transactionAttribute;
this.streams.addAll(parent.streams);
this.exceptionHandler = parent.exceptionHandler;
this.throttleLimit = parent.throttleLimit;
this.taskExecutor = parent.taskExecutor;
}
@@ -125,7 +122,6 @@ public abstract class AbstractTaskletStepBuilder<B extends AbstractTaskletStepBu
if (taskExecutor != null) {
TaskExecutorRepeatTemplate repeatTemplate = new TaskExecutorRepeatTemplate();
repeatTemplate.setTaskExecutor(taskExecutor);
repeatTemplate.setThrottleLimit(throttleLimit);
stepOperations = repeatTemplate;
}
@@ -210,24 +206,6 @@ public abstract class AbstractTaskletStepBuilder<B extends AbstractTaskletStepBu
return self();
}
/**
* In the case of an asynchronous {@link #taskExecutor(TaskExecutor)} the number of
* concurrent tasklet executions can be throttled (beyond any throttling provided by a
* thread pool). The throttle limit should be less than the data source pool size used
* in the job repository for this step.
* @param throttleLimit maximum number of concurrent tasklet executions allowed
* @return this for fluent chaining
* @deprecated with no replacement since 5.0, scheduled for removal in 6.0. Use a
* custom {@link RepeatOperations} implementation (based on a {@link TaskExecutor}
* with a bounded task queue) and set it on the step with
* {@link #stepOperations(RepeatOperations)}.
*/
@Deprecated(since = "5.0", forRemoval = true)
public B throttleLimit(int throttleLimit) {
this.throttleLimit = throttleLimit;
return self();
}
/**
* Sets the exception handler to use in the case of tasklet failures. Default is to
* rethrow everything.
@@ -302,11 +280,6 @@ public abstract class AbstractTaskletStepBuilder<B extends AbstractTaskletStepBu
return taskExecutor;
}
@Deprecated(since = "5.0", forRemoval = true)
protected int getThrottleLimit() {
return throttleLimit;
}
protected TransactionAttribute getTransactionAttribute() {
return transactionAttribute;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2023 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -34,16 +34,6 @@ import org.springframework.transaction.PlatformTransactionManager;
*/
public class StepBuilder extends StepBuilderHelper<StepBuilder> {
/**
* Initialize a step builder for a step with the given name.
* @param name the name of the step
* @deprecated use {@link StepBuilder#StepBuilder(String, JobRepository)}
*/
@Deprecated(since = "5.0", forRemoval = true)
public StepBuilder(String name) {
super(name);
}
/**
* Initialize a step builder for a step with the given name and job repository.
* @param name the name of the step
@@ -54,17 +44,6 @@ public class StepBuilder extends StepBuilderHelper<StepBuilder> {
super(name, jobRepository);
}
/**
* Build a step with a custom tasklet, not necessarily item processing.
* @param tasklet a tasklet
* @return a {@link TaskletStepBuilder}
* @deprecated use {@link StepBuilder#tasklet(Tasklet, PlatformTransactionManager)}
*/
@Deprecated(since = "5.0", forRemoval = true)
public TaskletStepBuilder tasklet(Tasklet tasklet) {
return new TaskletStepBuilder(this).tasklet(tasklet);
}
/**
* Build a step with a custom tasklet, not necessarily item processing.
* @param tasklet a tasklet
@@ -76,27 +55,6 @@ public class StepBuilder extends StepBuilderHelper<StepBuilder> {
return new TaskletStepBuilder(this).tasklet(tasklet, transactionManager);
}
/**
* Build a step that processes items in chunks with the size provided. To extend the
* step to being fault tolerant, call the {@link SimpleStepBuilder#faultTolerant()}
* method on the builder. In most cases you will want to parameterize your call to
* this method, to preserve the type safety of your readers and writers, e.g.
*
* <pre>
* new StepBuilder(&quot;step1&quot;).&lt;Order, Ledger&gt; chunk(100).reader(new OrderReader()).writer(new LedgerWriter())
* // ... etc.
* </pre>
* @param chunkSize the chunk size (commit interval)
* @return a {@link SimpleStepBuilder}
* @param <I> the type of item to be processed as input
* @param <O> the type of item to be output
* @deprecated use {@link StepBuilder#chunk(int, PlatformTransactionManager)}
*/
@Deprecated(since = "5.0", forRemoval = true)
public <I, O> SimpleStepBuilder<I, O> chunk(int chunkSize) {
return new SimpleStepBuilder<I, O>(this).chunk(chunkSize);
}
/**
* Build a step that processes items in chunks with the size provided. To extend the
* step to being fault tolerant, call the {@link SimpleStepBuilder#faultTolerant()}
@@ -119,29 +77,6 @@ public class StepBuilder extends StepBuilderHelper<StepBuilder> {
return new SimpleStepBuilder<I, O>(this).transactionManager(transactionManager).chunk(chunkSize);
}
/**
* Build a step that processes items in chunks with the completion policy provided. To
* extend the step to being fault tolerant, call the
* {@link SimpleStepBuilder#faultTolerant()} method on the builder. In most cases you
* will want to parameterize your call to this method, to preserve the type safety of
* your readers and writers, e.g.
*
* <pre>
* new StepBuilder(&quot;step1&quot;).&lt;Order, Ledger&gt; chunk(100).reader(new OrderReader()).writer(new LedgerWriter())
* // ... etc.
* </pre>
* @param completionPolicy the completion policy to use to control chunk processing
* @return a {@link SimpleStepBuilder}
* @param <I> the type of item to be processed as input
* @param <O> the type of item to be output
* @deprecated use
* {@link StepBuilder#chunk(CompletionPolicy, PlatformTransactionManager)}
*/
@Deprecated(since = "5.0", forRemoval = true)
public <I, O> SimpleStepBuilder<I, O> chunk(CompletionPolicy completionPolicy) {
return new SimpleStepBuilder<I, O>(this).chunk(completionPolicy);
}
/**
* Build a step that processes items in chunks with the completion policy provided. To
* extend the step to being fault tolerant, call the

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2023 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -53,17 +53,6 @@ public abstract class StepBuilderHelper<B extends StepBuilderHelper<B>> {
protected final CommonStepProperties properties;
/**
* Create a new {@link StepBuilderHelper}.
* @param name the step name
* @deprecated use {@link StepBuilderHelper#StepBuilderHelper(String, JobRepository)}
*/
@Deprecated(since = "5.1", forRemoval = true)
public StepBuilderHelper(String name) {
this.properties = new CommonStepProperties();
properties.name = name;
}
/**
* Create a new {@link StepBuilderHelper}.
* @param name the step name
@@ -85,18 +74,6 @@ public abstract class StepBuilderHelper<B extends StepBuilderHelper<B>> {
this.properties = new CommonStepProperties(parent.properties);
}
/**
* Set the job repository
* @param jobRepository the repository to set
* @return this to enable fluent chaining
* @deprecated use {@link StepBuilderHelper#StepBuilderHelper(String, JobRepository)}
*/
@Deprecated(since = "5.1", forRemoval = true)
public B repository(JobRepository jobRepository) {
properties.jobRepository = jobRepository;
return self();
}
/**
* Sets the step observation convention.
* @param observationConvention the step observation convention (optional)

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2023 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -38,18 +38,6 @@ public class TaskletStepBuilder extends AbstractTaskletStepBuilder<TaskletStepBu
super(parent);
}
/**
* @param tasklet the tasklet to use
* @return this for fluent chaining
* @deprecated use
* {@link TaskletStepBuilder#tasklet(Tasklet, PlatformTransactionManager)}
*/
@Deprecated(since = "5.0", forRemoval = true)
public TaskletStepBuilder tasklet(Tasklet tasklet) {
this.tasklet = tasklet;
return this;
}
/**
* @param tasklet the tasklet to use
* @return this for fluent chaining

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2023 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -441,20 +441,6 @@ public class SimpleStepFactoryBean<T, S> implements FactoryBean<Step>, BeanNameA
return taskExecutor;
}
/**
* Public setter for the throttle limit. This limits the number of tasks queued for
* concurrent processing to prevent thread pools from being overwhelmed. Defaults to
* {@link TaskExecutorRepeatTemplate#DEFAULT_THROTTLE_LIMIT}.
* @param throttleLimit the throttle limit to set.
* @deprecated since 5.0, scheduled for removal in 6.0. Use a pooled
* {@link TaskExecutor} implementation with a limited capacity of its task queue
* instead.
*/
@Deprecated(since = "5.0", forRemoval = true)
public void setThrottleLimit(int throttleLimit) {
this.throttleLimit = throttleLimit;
}
protected void applyConfiguration(SimpleStepBuilder<T, S> builder) {
builder.reader(itemReader);
@@ -482,7 +468,6 @@ public class SimpleStepFactoryBean<T, S> implements FactoryBean<Step>, BeanNameA
}
builder.transactionManager(transactionManager);
builder.transactionAttribute(getTransactionAttribute());
builder.repository(jobRepository);
builder.observationRegistry(observationRegistry);
builder.startLimit(startLimit);
builder.allowStartIfComplete(allowStartIfComplete);
@@ -491,7 +476,6 @@ public class SimpleStepFactoryBean<T, S> implements FactoryBean<Step>, BeanNameA
builder.chunkOperations(chunkOperations);
builder.stepOperations(stepOperations);
builder.taskExecutor(taskExecutor);
builder.throttleLimit(throttleLimit);
builder.exceptionHandler(exceptionHandler);
if (isReaderTransactionalQueue) {
builder.readerIsTransactionalQueue();

View File

@@ -6,7 +6,7 @@
xsi:schemaLocation="
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tool https://www.springframework.org/schema/tool/spring-tool.xsd"
version="5.0">
version="6.0">
<xsd:import namespace="http://www.springframework.org/schema/beans" />
<xsd:import namespace="http://www.springframework.org/schema/tool" />
@@ -265,20 +265,6 @@
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="lob-handler" type="xsd:string">
<xsd:annotation>
<xsd:documentation><![CDATA[
A reference to the lob handler (optional). Only override if using Oracle and
the database type is not being detected for some reason.
This attribute is deprecated Since 5.2 with no replacement. Scheduled for removal in v6.
]]></xsd:documentation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:expected-type type="org.springframework.jdbc.support.lob.LobHandler" />
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="conversion-service" type="xsd:string">
<xsd:annotation>
<xsd:documentation><![CDATA[
@@ -680,16 +666,6 @@
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="throttle-limit" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
This limits the number of tasks queued for concurrent
processing to prevent thread pools from being overwhelmed.
Default is 4. This is deprecated in favor of using similar
features in TaskExecutor implementations.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attributeGroup ref="allowStartIfCompleteAttribute"/>
</xsd:complexType>

View File

@@ -1,125 +0,0 @@
/*
* Copyright 2006-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.batch.core.configuration.support;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.Collection;
import org.junit.jupiter.api.Test;
import org.springframework.batch.core.configuration.DuplicateJobException;
import org.springframework.batch.core.job.JobSupport;
import org.springframework.beans.FatalBeanException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author Dave Syer
* @author Mahmoud Ben Hassine
*
*/
class JobRegistryBeanPostProcessorTests {
private final JobRegistryBeanPostProcessor processor = new JobRegistryBeanPostProcessor();
@Test
void testInitializationFails() {
Exception exception = assertThrows(IllegalStateException.class, processor::afterPropertiesSet);
assertTrue(exception.getMessage().contains("JobRegistry"));
}
@Test
void testBeforeInitialization() {
// should be a no-op
assertEquals("foo", processor.postProcessBeforeInitialization("foo", "bar"));
}
@Test
void testAfterInitializationWithWrongType() {
// should be a no-op
assertEquals("foo", processor.postProcessAfterInitialization("foo", "bar"));
}
@Test
void testAfterInitializationWithCorrectType() {
MapJobRegistry registry = new MapJobRegistry();
processor.setJobRegistry(registry);
JobSupport job = new JobSupport();
job.setBeanName("foo");
assertNotNull(processor.postProcessAfterInitialization(job, "bar"));
assertEquals("[foo]", registry.getJobNames().toString());
}
@Test
void testAfterInitializationWithGroupName() {
MapJobRegistry registry = new MapJobRegistry();
processor.setJobRegistry(registry);
processor.setGroupName("jobs");
JobSupport job = new JobSupport();
job.setBeanName("foo");
assertNotNull(processor.postProcessAfterInitialization(job, "bar"));
assertEquals("[jobs.foo]", registry.getJobNames().toString());
}
@Test
void testAfterInitializationWithDuplicate() {
MapJobRegistry registry = new MapJobRegistry();
processor.setJobRegistry(registry);
JobSupport job = new JobSupport();
job.setBeanName("foo");
processor.postProcessAfterInitialization(job, "bar");
Exception exception = assertThrows(FatalBeanException.class,
() -> processor.postProcessAfterInitialization(job, "spam"));
assertTrue(exception.getCause() instanceof DuplicateJobException);
}
@Test
void testUnregisterOnDestroy() throws Exception {
MapJobRegistry registry = new MapJobRegistry();
processor.setJobRegistry(registry);
JobSupport job = new JobSupport();
job.setBeanName("foo");
assertNotNull(processor.postProcessAfterInitialization(job, "bar"));
processor.destroy();
assertEquals("[]", registry.getJobNames().toString());
}
@Test
void testExecutionWithApplicationContext() throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("test-context.xml", getClass());
MapJobRegistry registry = (MapJobRegistry) context.getBean("registry");
Collection<String> configurations = registry.getJobNames();
String[] names = context.getBeanNamesForType(JobSupport.class);
int count = names.length;
// Each concrete bean of type JobConfiguration is registered...
assertEquals(count, configurations.size());
// N.B. there is a failure / wonky mode where a parent bean is given an
// explicit name or beanName (using property setter): in this case then
// child beans will have the same name and will be re-registered (and
// override, if the registry supports that).
assertNotNull(registry.getJob("test-job"));
assertEquals(context.getBean("test-job-with-name"), registry.getJob("foo"));
assertEquals(context.getBean("test-job-with-bean-name"), registry.getJob("bar"));
assertEquals(context.getBean("test-job-with-parent-and-name"), registry.getJob("spam"));
assertEquals(context.getBean("test-job-with-parent-and-bean-name"), registry.getJob("bucket"));
assertEquals(context.getBean("test-job-with-concrete-parent"), registry.getJob("maps"));
assertEquals(context.getBean("test-job-with-concrete-parent-and-name"), registry.getJob("oof"));
assertEquals(context.getBean("test-job-with-concrete-parent-and-bean-name"), registry.getJob("rab"));
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2023 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -239,7 +239,6 @@ class StepParserStepFactoryBeanTests {
fb.setIsReaderTransactionalQueue(true);
fb.setRetryLimit(5);
fb.setSkipLimit(100);
fb.setThrottleLimit(10);
fb.setRetryListeners(new RetryListener() {
});
@SuppressWarnings("unchecked")
@@ -251,7 +250,7 @@ class StepParserStepFactoryBeanTests {
assertTrue(step instanceof TaskletStep);
Object throttleLimit = ReflectionTestUtils.getField(ReflectionTestUtils.getField(step, "stepOperations"),
"throttleLimit");
assertEquals(10, throttleLimit);
assertEquals(4, throttleLimit);
Object tasklet = ReflectionTestUtils.getField(step, "tasklet");
assertTrue(tasklet instanceof ChunkOrientedTasklet<?>);
assertFalse((Boolean) ReflectionTestUtils.getField(tasklet, "buffering"));

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2023 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -88,8 +88,6 @@ public class StepParserTests {
StepParserStepFactoryBean<Object, Object> factory = beans.get(factoryName);
TaskletStep bean = (TaskletStep) factory.getObject();
assertEquals(25, bean.getStartLimit(), "wrong start-limit:");
Object throttleLimit = ReflectionTestUtils.getField(factory, "throttleLimit");
assertEquals(10, throttleLimit);
}
@Test

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2023 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -42,8 +42,6 @@ import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcOperations;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
import org.springframework.jdbc.support.lob.DefaultLobHandler;
import org.springframework.jdbc.support.lob.LobHandler;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.Isolation;
@@ -112,48 +110,6 @@ class JobRepositoryFactoryBeanTests {
}
@Test
void testOracleLobHandler() throws Exception {
factory.setDatabaseType("ORACLE");
incrementerFactory = mock();
when(incrementerFactory.isSupportedIncrementerType("ORACLE")).thenReturn(true);
when(incrementerFactory.getIncrementer("ORACLE", tablePrefix + "JOB_SEQ")).thenReturn(new StubIncrementer());
when(incrementerFactory.getIncrementer("ORACLE", tablePrefix + "JOB_EXECUTION_SEQ"))
.thenReturn(new StubIncrementer());
when(incrementerFactory.getIncrementer("ORACLE", tablePrefix + "STEP_EXECUTION_SEQ"))
.thenReturn(new StubIncrementer());
factory.setIncrementerFactory(incrementerFactory);
factory.afterPropertiesSet();
LobHandler lobHandler = (LobHandler) ReflectionTestUtils.getField(factory, "lobHandler");
assertTrue(lobHandler instanceof DefaultLobHandler);
}
@Test
void testCustomLobHandler() throws Exception {
factory.setDatabaseType("ORACLE");
incrementerFactory = mock();
when(incrementerFactory.isSupportedIncrementerType("ORACLE")).thenReturn(true);
when(incrementerFactory.getIncrementer("ORACLE", tablePrefix + "JOB_SEQ")).thenReturn(new StubIncrementer());
when(incrementerFactory.getIncrementer("ORACLE", tablePrefix + "JOB_EXECUTION_SEQ"))
.thenReturn(new StubIncrementer());
when(incrementerFactory.getIncrementer("ORACLE", tablePrefix + "STEP_EXECUTION_SEQ"))
.thenReturn(new StubIncrementer());
factory.setIncrementerFactory(incrementerFactory);
LobHandler lobHandler = new DefaultLobHandler();
factory.setLobHandler(lobHandler);
factory.afterPropertiesSet();
assertEquals(lobHandler, ReflectionTestUtils.getField(factory, "lobHandler"));
}
@Test
@SuppressWarnings("unchecked")
void tesDefaultSerializer() throws Exception {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2023 the original author or authors.
* Copyright 2012-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -252,11 +252,6 @@ class StepBuilderTests {
testReturnedTypeOfSetterIsAssignableToSimpleStepBuilder(builder -> builder.taskExecutor(null));
}
@Test
void testReturnedTypeOfThrottleLimitIsAssignableToSimpleStepBuilder() throws Exception {
testReturnedTypeOfSetterIsAssignableToSimpleStepBuilder(builder -> builder.throttleLimit(4));
}
@Test
void testReturnedTypeOfExceptionHandlerIsAssignableToSimpleStepBuilder() throws Exception {
testReturnedTypeOfSetterIsAssignableToSimpleStepBuilder(

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2024 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -151,7 +151,6 @@ class SimpleStepFactoryBeanTests {
SimpleStepFactoryBean<String, String> factory = getStepFactory("foo", "bar");
factory.setTaskExecutor(new SimpleAsyncTaskExecutor());
factory.setThrottleLimit(1);
AbstractStep step = (AbstractStep) factory.getObject();
step.setName("step1");

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2023 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -109,7 +109,6 @@ class AsyncChunkOrientedStepIntegrationTests {
job = new JobSupport("FOO");
TaskExecutorRepeatTemplate repeatTemplate = new TaskExecutorRepeatTemplate();
repeatTemplate.setThrottleLimit(2);
repeatTemplate.setTaskExecutor(new SimpleAsyncTaskExecutor());
step.setStepOperations(repeatTemplate);
step.setTransactionManager(transactionManager);

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2023 the original author or authors.
* Copyright 2006-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -90,7 +90,6 @@ class AsyncTaskletStepTests {
step.setJobRepository(jobRepository);
TaskExecutorRepeatTemplate template = new TaskExecutorRepeatTemplate();
template.setThrottleLimit(throttleLimit);
SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
taskExecutor.setConcurrencyLimit(concurrencyLimit);
template.setTaskExecutor(taskExecutor);

View File

@@ -13,7 +13,7 @@
<bean id="jobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry"/>
<bean class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
<bean class="org.springframework.batch.core.configuration.support.JobRegistrySmartInitializingSingleton">
<property name="jobRegistry" ref="jobRegistry"/>
</bean>

View File

@@ -10,7 +10,7 @@
http://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx.xsd">
<bean
class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
class="org.springframework.batch.core.configuration.support.JobRegistrySmartInitializingSingleton">
<property name="jobRegistry" ref="registry" />
</bean>

View File

@@ -11,7 +11,7 @@
</property>
</bean>
<bean class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
<bean class="org.springframework.batch.core.configuration.support.JobRegistrySmartInitializingSingleton">
<property name="jobRegistry" ref="jobRegistry" />
</bean>

View File

@@ -20,7 +20,7 @@
<bean id="jobRegistry"
class="org.springframework.batch.core.configuration.support.MapJobRegistry" />
<bean
class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
class="org.springframework.batch.core.configuration.support.JobRegistrySmartInitializingSingleton">
<property name="jobRegistry" ref="jobRegistry" />
</bean>

View File

@@ -14,9 +14,8 @@
<beans:bean id="transactionManager" class="org.springframework.jdbc.support.JdbcTransactionManager">
<beans:property name="dataSource" ref="dataSource"/>
</beans:bean>
<beans:bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler"/>
<beans:bean id="serializer" class="org.springframework.batch.core.repository.dao.DefaultExecutionContextSerializer"/>
<job-repository id="jobRepo1" data-source="dataSource" jdbc-operations="jdbcTemplate" transaction-manager="transactionManager" lob-handler="lobHandler" max-varchar-length="100" serializer="serializer"/>
<job-repository id="jobRepo1" data-source="dataSource" jdbc-operations="jdbcTemplate" transaction-manager="transactionManager" max-varchar-length="100" serializer="serializer"/>
</beans:beans>

View File

@@ -9,7 +9,7 @@
<job id="job">
<step id="step">
<tasklet start-limit="25" allow-start-if-complete="true" task-executor="taskExecutor" throttle-limit="10">
<tasklet start-limit="25" allow-start-if-complete="true" task-executor="taskExecutor">
<chunk reader="reader" processor="processor" writer="writer" commit-interval="10" skip-limit="20"
retry-limit="3" cache-capacity="100" reader-transactional-queue="true">
<retry-listeners>

View File

@@ -38,7 +38,7 @@
<bean id="jobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry"/>
<bean class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
<bean class="org.springframework.batch.core.configuration.support.JobRegistrySmartInitializingSingleton">
<property name="jobRegistry" ref="jobRegistry"/>
</bean>

View File

@@ -15,7 +15,7 @@
<bean id="jobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry"/>
<bean class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
<bean class="org.springframework.batch.core.configuration.support.JobRegistrySmartInitializingSingleton">
<property name="jobRegistry" ref="jobRegistry"/>
</bean>

View File

@@ -9,7 +9,7 @@
<import resource="test-environment-with-registry.xml" />
<bean class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
<bean class="org.springframework.batch.core.configuration.support.JobRegistrySmartInitializingSingleton">
<property name="jobRegistry" ref="jobRegistry"/>
</bean>

View File

@@ -11,7 +11,7 @@
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
<bean class="org.springframework.batch.core.configuration.support.JobRegistrySmartInitializingSingleton">
<property name="jobRegistry" ref="jobRegistry"/>
</bean>