jobOperator = new SimpleJobOperator(); jobOperator.setJobRegistry(new MapJobRegistry() { @Override public Job getJob(String name) throws NoSuchJobException { jobOperator.setJobLauncher((job, jobParameters) -> new JobExecution(new JobInstance(123L, job.getName()), 999L, jobParameters, null)); jobOperator.setJobExplorer(jobExplorer); jobOperator.setJobRepository(jobRepository); jobOperator.setJobParametersConverter(new DefaultJobParametersConverter() { @Override public JobParameters getJobParameters(Properties props) { jobOperator.afterPropertiesSet();
@Override public String getSummary(long executionId) throws NoSuchJobExecutionException { JobExecution jobExecution = findExecutionById(executionId); return jobExecution.toString(); }
@Test public void testMandatoryProperties() throws Exception { jobOperator = new SimpleJobOperator(); try { jobOperator.afterPropertiesSet(); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected } }
@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(); }
return delegate.getExecutions(l); return delegate.getJobInstances(s, i, i1); return delegate.getRunningExecutions(s); return delegate.getParameters(l); return delegate.start(s, s1); return delegate.restart(l); return delegate.startNextInstance(s); return delegate.stop(l); return delegate.getSummary(l); return delegate.getStepExecutionSummaries(l); return delegate.getJobNames(); return delegate.abandon(l); delegate = new SimpleJobOperator(); delegate.setJobRegistry(jobRegistry); delegate.setJobExplorer(jobExplorer); delegate.setJobLauncher(jobLauncher); delegate.setJobRepository(jobRepository);
@Test public void testStopTasklet() throws Exception { JobInstance jobInstance = new JobInstance(123L, job.getName()); JobExecution jobExecution = new JobExecution(jobInstance, 111L, jobParameters, null); StoppableTasklet tasklet = mock(StoppableTasklet.class); TaskletStep taskletStep = new TaskletStep(); taskletStep.setTasklet(tasklet); MockJob job = new MockJob(); job.taskletStep = taskletStep; JobRegistry jobRegistry = mock(JobRegistry.class); TaskletStep step = mock(TaskletStep.class); when(step.getTasklet()).thenReturn(tasklet); when(step.getName()).thenReturn("test_job.step1"); when(jobRegistry.getJob(any(String.class))).thenReturn(job); when(jobExplorer.getJobExecution(111L)).thenReturn(jobExecution); jobOperator.setJobRegistry(jobRegistry); jobExplorer.getJobExecution(111L); jobRepository.update(jobExecution); jobOperator.stop(111L); assertEquals(BatchStatus.STOPPING, jobExecution.getStatus()); }
@Bean public JobOperator jobOperator(JobExplorer jobExplorer, JobLauncher jobLauncher, ListableJobLocator jobRegistry, JobRepository jobRepository) throws Exception { SimpleJobOperator jobOperator = new SimpleJobOperator(); jobOperator.setJobExplorer(jobExplorer); jobOperator.setJobLauncher(jobLauncher); jobOperator.setJobRegistry(jobRegistry); jobOperator.setJobRepository(jobRepository); return jobOperator; }
@Override public Map<Long, String> getStepExecutionSummaries(long executionId) throws NoSuchJobExecutionException { JobExecution jobExecution = findExecutionById(executionId); Map<Long, String> map = new LinkedHashMap<>(); for (StepExecution stepExecution : jobExecution.getStepExecutions()) { map.put(stepExecution.getId(), stepExecution.toString()); } return map; }
@Test public void testStopTaskletException() throws Exception { JobInstance jobInstance = new JobInstance(123L, job.getName()); JobExecution jobExecution = new JobExecution(jobInstance, 111L, jobParameters, null); StoppableTasklet tasklet = new StoppableTasklet() { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { return null; } @Override public void stop() { throw new IllegalStateException(); }}; TaskletStep taskletStep = new TaskletStep(); taskletStep.setTasklet(tasklet); MockJob job = new MockJob(); job.taskletStep = taskletStep; JobRegistry jobRegistry = mock(JobRegistry.class); TaskletStep step = mock(TaskletStep.class); when(step.getTasklet()).thenReturn(tasklet); when(step.getName()).thenReturn("test_job.step1"); when(jobRegistry.getJob(any(String.class))).thenReturn(job); when(jobExplorer.getJobExecution(111L)).thenReturn(jobExecution); jobOperator.setJobRegistry(jobRegistry); jobExplorer.getJobExecution(111L); jobRepository.update(jobExecution); jobOperator.stop(111L); assertEquals(BatchStatus.STOPPING, jobExecution.getStatus()); }
@Bean @ConditionalOnMissingBean(JobOperator.class) public JobOperator jobOperator(JobExplorer jobExplorer, JobLauncher jobLauncher, ListableJobLocator jobRegistry, JobRepository jobRepository) throws Exception { SimpleJobOperator jobOperator = new SimpleJobOperator(); jobOperator.setJobExplorer(jobExplorer); jobOperator.setJobLauncher(jobLauncher); jobOperator.setJobRegistry(jobRegistry); jobOperator.setJobRepository(jobRepository); return jobOperator; }
@Override public String getParameters(long executionId) throws NoSuchJobExecutionException { JobExecution jobExecution = findExecutionById(executionId); return PropertiesConverter.propertiesToString(jobParametersConverter.getProperties(jobExecution .getJobParameters())); }
@Bean public JobOperator jobOperator() throws Exception { SimpleJobOperator simpleJobOperator = new SimpleJobOperator(); simpleJobOperator.setJobLauncher(this.jobLauncher); simpleJobOperator.setJobParametersConverter(new DefaultJobParametersConverter()); simpleJobOperator.setJobRepository(this.jobRepository); simpleJobOperator.setJobExplorer(this.jobExplorer); simpleJobOperator.setJobRegistry(this.jobRegistry); simpleJobOperator.afterPropertiesSet(); return simpleJobOperator; }
@Override public Long restart(long executionId) throws JobInstanceAlreadyCompleteException, NoSuchJobExecutionException, NoSuchJobException, JobRestartException, JobParametersInvalidException { logger.info("Checking status of job execution with id=" + executionId); JobExecution jobExecution = findExecutionById(executionId); String jobName = jobExecution.getJobInstance().getJobName(); Job job = jobRegistry.getJob(jobName); JobParameters parameters = jobExecution.getJobParameters(); logger.info(String.format("Attempting to resume job with name=%s and parameters=%s", jobName, parameters)); try { return jobLauncher.run(job, parameters).getId(); } catch (JobExecutionAlreadyRunningException e) { throw new UnexpectedJobExecutionException(String.format(ILLEGAL_STATE_MSG, "job execution already running", jobName, parameters), e); } }
@Bean public JobOperator jobOperator() throws Exception { SimpleJobOperator simpleJobOperator = new SimpleJobOperator(); simpleJobOperator.setJobLauncher(this.jobLauncher); simpleJobOperator.setJobParametersConverter(new DefaultJobParametersConverter()); simpleJobOperator.setJobRepository(this.jobRepository); simpleJobOperator.setJobExplorer(this.jobExplorer); simpleJobOperator.setJobRegistry(this.jobRegistry); simpleJobOperator.afterPropertiesSet(); return simpleJobOperator; }
@Override public JobExecution abandon(long jobExecutionId) throws NoSuchJobExecutionException, JobExecutionAlreadyRunningException { JobExecution jobExecution = findExecutionById(jobExecutionId); if (jobExecution.getStatus().isLessThan(BatchStatus.STOPPING)) { throw new JobExecutionAlreadyRunningException( "JobExecution is running or complete and therefore cannot be aborted"); } logger.info("Aborting job execution: " + jobExecution); jobExecution.upgradeStatus(BatchStatus.ABANDONED); jobExecution.setEndTime(new Date()); jobRepository.update(jobExecution); return jobExecution; }
@Bean @Autowired public JobOperator jobOperator(JobExplorer jobExplorer, JobLauncher jobLauncher, JobRepository jobRepository, ListableJobLocator jobRegistry) { SimpleJobOperator jobOperator = new SimpleJobOperator(); jobOperator.setJobExplorer(jobExplorer); jobOperator.setJobLauncher(jobLauncher); jobOperator.setJobRepository(jobRepository); jobOperator.setJobRegistry(jobRegistry); return jobOperator; }
public boolean stop(long executionId) throws NoSuchJobExecutionException, JobExecutionNotRunningException { JobExecution jobExecution = findExecutionById(executionId);
@Bean @Autowired public JobOperator jobOperator(JobExplorer jobExplorer, JobLauncher jobLauncher, JobRepository jobRepository, ListableJobLocator jobRegistry) { SimpleJobOperator jobOperator = new SimpleJobOperator(); jobOperator.setJobExplorer(jobExplorer); jobOperator.setJobLauncher(jobLauncher); jobOperator.setJobRepository(jobRepository); jobOperator.setJobRegistry(jobRegistry); return jobOperator; }
@Override public String getSummary(long executionId) throws NoSuchJobExecutionException { JobExecution jobExecution = findExecutionById(executionId); return jobExecution.toString(); }
@Bean public JobOperator jobOperator() throws Exception { SimpleJobOperator simpleJobOperator = new SimpleJobOperator(); simpleJobOperator.setJobLauncher(this.jobLauncher); simpleJobOperator.setJobParametersConverter(new DefaultJobParametersConverter()); simpleJobOperator.setJobRepository(this.jobRepository); simpleJobOperator.setJobExplorer(this.jobExplorer); simpleJobOperator.setJobRegistry(this.jobRegistry); simpleJobOperator.afterPropertiesSet(); return simpleJobOperator; }