diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/annotation/EnableBatchProcessing.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/annotation/EnableBatchProcessing.java index 999706a53..4b653530d 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/annotation/EnableBatchProcessing.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/annotation/EnableBatchProcessing.java @@ -89,7 +89,7 @@ import org.springframework.transaction.PlatformTransactionManager; * {@link org.springframework.batch.core.configuration.support.MapJobRegistry}) *
  • a {@link org.springframework.batch.core.launch.JobOperator} (bean name * "jobOperator" of type - * {@link org.springframework.batch.core.launch.support.SimpleJobOperator})
  • + * {@link org.springframework.batch.core.launch.support.TaskExecutorJobOperator}) *
  • a * {@link org.springframework.batch.core.configuration.support.JobRegistrySmartInitializingSingleton} * (bean name "jobRegistrySmartInitializingSingleton" of type diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/JobOperatorFactoryBean.java b/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/JobOperatorFactoryBean.java index ed8425827..920a6fe0d 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/JobOperatorFactoryBean.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/JobOperatorFactoryBean.java @@ -45,7 +45,7 @@ import org.springframework.util.Assert; * {@link JobOperator}. * * @see JobOperator - * @see SimpleJobOperator + * @see TaskExecutorJobOperator * @author Mahmoud Ben Hassine * @since 5.0 */ @@ -174,15 +174,15 @@ public class JobOperatorFactoryBean implements FactoryBean, Initial return (JobOperator) this.proxyFactory.getProxy(getClass().getClassLoader()); } - private SimpleJobOperator getTarget() throws Exception { - SimpleJobOperator simpleJobOperator = new SimpleJobOperator(); - simpleJobOperator.setJobRegistry(this.jobRegistry); - simpleJobOperator.setJobRepository(this.jobRepository); - simpleJobOperator.setTaskExecutor(this.taskExecutor); - simpleJobOperator.setMeterRegistry(this.meterRegistry); - simpleJobOperator.setJobParametersConverter(this.jobParametersConverter); - simpleJobOperator.afterPropertiesSet(); - return simpleJobOperator; + private TaskExecutorJobOperator getTarget() throws Exception { + TaskExecutorJobOperator taskExecutorJobOperator = new TaskExecutorJobOperator(); + taskExecutorJobOperator.setJobRegistry(this.jobRegistry); + taskExecutorJobOperator.setJobRepository(this.jobRepository); + taskExecutorJobOperator.setTaskExecutor(this.taskExecutor); + taskExecutorJobOperator.setMeterRegistry(this.meterRegistry); + taskExecutorJobOperator.setJobParametersConverter(this.jobParametersConverter); + taskExecutorJobOperator.afterPropertiesSet(); + return taskExecutorJobOperator; } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/SimpleJobOperator.java b/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/SimpleJobOperator.java index c81eebc2b..ddaac05fb 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/SimpleJobOperator.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/SimpleJobOperator.java @@ -81,15 +81,18 @@ import org.springframework.util.Assert; * @author Will Schipp * @author Mahmoud Ben Hassine * @since 2.0 + * @deprecated since 6.0 in favor of {@link TaskExecutorJobOperator}. Scheduled for + * removal in 6.2 or later. */ +@Deprecated(since = "6.0", forRemoval = true) public class SimpleJobOperator extends TaskExecutorJobLauncher implements JobOperator, InitializingBean { private static final String ILLEGAL_STATE_MSG = "Illegal state (only happens on a race condition): " + "%s with name=%s and parameters=%s"; - private ListableJobLocator jobRegistry; + protected ListableJobLocator jobRegistry; - private JobParametersConverter jobParametersConverter = new DefaultJobParametersConverter(); + protected JobParametersConverter jobParametersConverter = new DefaultJobParametersConverter(); private final Log logger = LogFactory.getLog(getClass()); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/TaskExecutorJobOperator.java b/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/TaskExecutorJobOperator.java new file mode 100644 index 000000000..8eb25f342 --- /dev/null +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/TaskExecutorJobOperator.java @@ -0,0 +1,52 @@ +/* + * Copyright 2022-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. + * 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.launch.support; + +import org.springframework.batch.core.configuration.JobRegistry; +import org.springframework.batch.core.configuration.ListableJobLocator; +import org.springframework.batch.core.launch.JobOperator; +import org.springframework.batch.core.repository.JobRepository; + +/** + * A {@link org.springframework.core.task.TaskExecutor}-based implementation of the + * {@link JobOperator} interface. The following dependencies are required: + * + * + * + * This class can be instantiated with a {@link JobOperatorFactoryBean} to create a + * transactional proxy around the job operator. + * + * @see JobOperatorFactoryBean + * @author Dave Syer + * @author Lucas Ward + * @author Will Schipp + * @author Mahmoud Ben Hassine + * @since 6.0 + */ +public class TaskExecutorJobOperator extends SimpleJobOperator { + + /** + * Public setter for the {@link ListableJobLocator}. + * @param jobRegistry the {@link ListableJobLocator} to set + */ + public void setJobRegistry(ListableJobLocator jobRegistry) { + this.jobRegistry = jobRegistry; + } + +} diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/JobOperatorFactoryBeanTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/JobOperatorFactoryBeanTests.java index 0b1241c01..2ef929624 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/JobOperatorFactoryBeanTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/JobOperatorFactoryBeanTests.java @@ -61,7 +61,7 @@ class JobOperatorFactoryBeanTests { // then Assertions.assertNotNull(jobOperator); Object targetObject = AopTestUtils.getTargetObject(jobOperator); - Assertions.assertInstanceOf(SimpleJobOperator.class, targetObject); + Assertions.assertInstanceOf(TaskExecutorJobOperator.class, targetObject); Assertions.assertEquals(this.transactionManager, getTransactionManagerSetOnJobOperator(jobOperator)); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/SimpleJobOperatorTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/TaskExecutorJobOperatorTests.java similarity index 97% rename from spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/SimpleJobOperatorTests.java rename to spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/TaskExecutorJobOperatorTests.java index 30e2ccd4b..a7f351dc3 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/SimpleJobOperatorTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/launch/support/TaskExecutorJobOperatorTests.java @@ -47,9 +47,7 @@ import org.springframework.batch.core.launch.NoSuchJobException; import org.springframework.batch.core.launch.NoSuchJobExecutionException; import org.springframework.batch.core.launch.NoSuchJobInstanceException; import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException; -import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException; import org.springframework.batch.core.repository.JobRepository; -import org.springframework.batch.core.repository.JobRestartException; import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.tasklet.StoppableTasklet; import org.springframework.batch.core.step.tasklet.TaskletStep; @@ -74,9 +72,9 @@ import static org.mockito.Mockito.when; * @author Jinwoo Bae * */ -class SimpleJobOperatorTests { +class TaskExecutorJobOperatorTests { - private SimpleJobOperator jobOperator; + private TaskExecutorJobOperator jobOperator; protected Job job; @@ -99,7 +97,7 @@ class SimpleJobOperatorTests { } }; - jobOperator = new SimpleJobOperator() { + jobOperator = new TaskExecutorJobOperator() { @Override public JobExecution run(Job job, JobParameters jobParameters) { return new JobExecution(new JobInstance(123L, job.getName()), 999L, jobParameters); @@ -143,13 +141,13 @@ class SimpleJobOperatorTests { @Test void testMandatoryProperties() { - jobOperator = new SimpleJobOperator(); + jobOperator = new TaskExecutorJobOperator(); assertThrows(IllegalStateException.class, jobOperator::afterPropertiesSet); } /** * Test method for - * {@link org.springframework.batch.core.launch.support.SimpleJobOperator#startNextInstance(java.lang.String)} + * {@link org.springframework.batch.core.launch.support.TaskExecutorJobOperator#startNextInstance(java.lang.String)} * . */ @Test diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/repository/dao/OptimisticLockingFailureTests-context.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/repository/dao/OptimisticLockingFailureTests-context.xml index b62728286..c85a00a2c 100644 --- a/spring-batch-core/src/test/resources/org/springframework/batch/core/repository/dao/OptimisticLockingFailureTests-context.xml +++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/repository/dao/OptimisticLockingFailureTests-context.xml @@ -48,7 +48,7 @@ - + diff --git a/spring-batch-core/src/test/resources/simple-job-launcher-context.xml b/spring-batch-core/src/test/resources/simple-job-launcher-context.xml index 2b0a31aa8..3a676bfbe 100644 --- a/spring-batch-core/src/test/resources/simple-job-launcher-context.xml +++ b/spring-batch-core/src/test/resources/simple-job-launcher-context.xml @@ -15,7 +15,7 @@ p:dataSource-ref="dataSource" p:transactionManager-ref="transactionManager" /> + diff --git a/spring-batch-samples/src/main/resources/org/springframework/batch/samples/misc/jmx/adhoc-job-launcher-context.xml b/spring-batch-samples/src/main/resources/org/springframework/batch/samples/misc/jmx/adhoc-job-launcher-context.xml index 457fb2e0c..f7cd86680 100644 --- a/spring-batch-samples/src/main/resources/org/springframework/batch/samples/misc/jmx/adhoc-job-launcher-context.xml +++ b/spring-batch-samples/src/main/resources/org/springframework/batch/samples/misc/jmx/adhoc-job-launcher-context.xml @@ -43,7 +43,7 @@ - + diff --git a/spring-batch-samples/src/main/resources/org/springframework/batch/samples/restart/stop/stopRestartSample.xml b/spring-batch-samples/src/main/resources/org/springframework/batch/samples/restart/stop/stopRestartSample.xml index 5b4e1aeae..d222c7152 100644 --- a/spring-batch-samples/src/main/resources/org/springframework/batch/samples/restart/stop/stopRestartSample.xml +++ b/spring-batch-samples/src/main/resources/org/springframework/batch/samples/restart/stop/stopRestartSample.xml @@ -14,7 +14,7 @@ p:dataSource-ref="dataSource" p:transactionManager-ref="transactionManager"/> diff --git a/spring-batch-samples/src/main/resources/org/springframework/batch/samples/skip/job/skipSample-job-launcher-context.xml b/spring-batch-samples/src/main/resources/org/springframework/batch/samples/skip/job/skipSample-job-launcher-context.xml index 89e43c035..58a60aaaf 100644 --- a/spring-batch-samples/src/main/resources/org/springframework/batch/samples/skip/job/skipSample-job-launcher-context.xml +++ b/spring-batch-samples/src/main/resources/org/springframework/batch/samples/skip/job/skipSample-job-launcher-context.xml @@ -9,7 +9,7 @@ -