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 f892f93bd..08d94dc0c 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 @@ -425,7 +425,7 @@ public class SimpleJobOperator implements JobOperator, InitializingBean { } } catch (NoSuchJobException e) { - logger.warn("Cannot find Job object",e); + logger.warn("Cannot find Job object in the job registry. StoppableTasklet#stop() will not be called",e); } return true; 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/SimpleJobOperatorTests.java index b45cddbff..c53c708f2 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/SimpleJobOperatorTests.java @@ -60,6 +60,8 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** @@ -365,6 +367,24 @@ public class SimpleJobOperatorTests { jobOperator.stop(111L); assertEquals(BatchStatus.STOPPING, jobExecution.getStatus()); } + + @Test + public void testStopTaskletWhenJobNotRegistered() throws Exception { + JobInstance jobInstance = new JobInstance(123L, job.getName()); + JobExecution jobExecution = new JobExecution(jobInstance, 111L, jobParameters, null); + StoppableTasklet tasklet = mock(StoppableTasklet.class); + JobRegistry jobRegistry = mock(JobRegistry.class); + TaskletStep step = mock(TaskletStep.class); + + when(step.getTasklet()).thenReturn(tasklet); + when(jobRegistry.getJob(job.getName())).thenThrow(new NoSuchJobException("Unable to find job")); + when(jobExplorer.getJobExecution(111L)).thenReturn(jobExecution); + + jobOperator.setJobRegistry(jobRegistry); + jobOperator.stop(111L); + assertEquals(BatchStatus.STOPPING, jobExecution.getStatus()); + verify(tasklet, never()).stop(); + } @Test public void testStopTaskletException() throws Exception {