job.setSteps(stepsToExecute);
private StepExecution launchStep(String stepName) throws Exception { SimpleJob job = new SimpleJob(); job.setName("job"); job.setJobRepository(jobRepository); List<Step> stepsToExecute = new ArrayList<>(); stepsToExecute.add((Step) applicationContext.getBean(stepName)); job.setSteps(stepsToExecute); JobExecution jobExecution = jobLauncher.run(job, new JobParametersBuilder().addString("uuid", UUID.randomUUID().toString()).toJobParameters()); return jobExecution.getStepExecutions().iterator().next(); }
/** * Test method for {@link SimpleJob#setSteps(java.util.List)}. */ @Test public void testSetSteps() { job.setSteps(Collections.singletonList((Step) new StepSupport("step"))); job.execute(jobExecution); assertEquals(1, jobExecution.getStepExecutions().size()); }
@Test public void testNoSteps() throws Exception { job.setSteps(new ArrayList<>()); job.execute(jobExecution); ExitStatus exitStatus = jobExecution.getExitStatus(); assertTrue("Wrong message in execution: " + exitStatus, exitStatus.getExitDescription().indexOf( "no steps configured") >= 0); }
public Job build() { if (builder != null) { return builder.end().build(); } SimpleJob job = new SimpleJob(getName()); super.enhance(job); job.setSteps(steps); try { job.afterPropertiesSet(); } catch (Exception e) { throw new JobBuilderException(e); } return job; }
@Test public void testStepAlreadyCompleteInSameExecution() throws Exception { List<Step> steps = new ArrayList<>(); steps.add(step1); steps.add(step2); // Two steps with the same name should both be executed, since // the user might actually want it to happen twice. On a restart // it would be executed twice again, even if it failed on the // second execution. This seems reasonable. steps.add(step2); job.setSteps(steps); job.execute(jobExecution); assertEquals(0, jobExecution.getFailureExceptions().size()); assertEquals(3, jobExecution.getStepExecutions().size()); assertEquals(stepExecution1.getStepName(), jobExecution.getStepExecutions().iterator().next().getStepName()); }
/** * Test method for * {@link SimpleJob#addStep(org.springframework.batch.core.Step)}. */ @Test public void testAddStep() { job.setSteps(Collections.<Step> emptyList()); job.addStep(new StepSupport("step")); job.execute(jobExecution); assertEquals(1, jobExecution.getStepExecutions().size()); }
@Test public void testGetStepNotExists() { step1 = new StubStep("step1", jobRepository); step2 = new StubStep("step2", jobRepository); job.setSteps(Arrays.asList(new Step[] { step1, step2 })); Step step = job.getStep("foo"); assertNull(step); }
@Test public void testStepFailure() throws Exception { job.setSteps(Arrays.<Step> asList(new StepSupport("step"))); job.execute(execution); assertEquals(BatchStatus.FAILED, execution.getStatus()); }
@Test public void testExitStatusReturned() throws JobExecutionException { final ExitStatus customStatus = new ExitStatus("test"); Step testStep = new Step() { @Override public void execute(StepExecution stepExecution) throws JobInterruptedException { stepExecution.setExitStatus(customStatus); } @Override public String getName() { return "test"; } @Override public int getStartLimit() { return 1; } @Override public boolean isAllowStartIfComplete() { return false; } }; List<Step> steps = new ArrayList<>(); steps.add(testStep); job.setSteps(steps); job.execute(jobExecution); assertEquals(customStatus, jobExecution.getExitStatus()); }
@Test public void testGetStepExists() { step1 = new StubStep("step1", jobRepository); step2 = new StubStep("step2", jobRepository); job.setSteps(Arrays.asList(new Step[] { step1, step2 })); Step step = job.getStep("step2"); assertNotNull(step); assertEquals("step2", step.getName()); }
@Test public void testStepStatusUnknown() throws Exception { job.setSteps(Arrays.<Step> asList(new StepSupport("step1") { @Override public void execute(StepExecution stepExecution) throws JobInterruptedException, UnexpectedJobExecutionException { // This is what happens if the repository meta-data cannot be updated stepExecution.setStatus(BatchStatus.UNKNOWN); stepExecution.setTerminateOnly(); } }, new StepSupport("step2"))); job.execute(execution); assertEquals(BatchStatus.UNKNOWN, execution.getStatus()); assertEquals(1, execution.getStepExecutions().size()); }
@Test public void testInterruptJob() throws Exception { step1 = new StubStep("interruptStep", jobRepository) { @Override public void execute(StepExecution stepExecution) throws JobInterruptedException, UnexpectedJobExecutionException { stepExecution.getJobExecution().stop(); super.execute(stepExecution); } }; job.setSteps(Arrays.asList(new Step[] { step1, step2 })); job.execute(jobExecution); assertEquals(BatchStatus.STOPPED, jobExecution.getStatus()); assertEquals(1, jobExecution.getAllFailureExceptions().size()); Throwable expected = jobExecution.getAllFailureExceptions().get(0); assertTrue("Wrong exception " + expected, expected instanceof JobInterruptedException); assertEquals("JobExecution interrupted.", expected.getMessage()); assertNull("Second step was not supposed to be executed", step2.passedInStepContext); }
@Test public void testExceptionTerminates() throws Exception { SimpleStepFactoryBean<String, String> factory = getStepFactory(new String[] { "foo", "bar", "spam" }); factory.setBeanName("exceptionStep"); factory.setItemWriter(new ItemWriter<String>() { @Override public void write(List<? extends String> data) throws Exception { throw new RuntimeException("Foo"); } }); AbstractStep step = (AbstractStep) factory.getObject(); job.setSteps(Collections.singletonList((Step) step)); JobExecution jobExecution = repository.createJobExecution(job.getName(), new JobParameters()); job.execute(jobExecution); assertEquals("Foo", jobExecution.getAllFailureExceptions().get(0).getMessage()); assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); }
@Test public void testSimpleJob() throws Exception { job.setSteps(new ArrayList<>()); AbstractStep step = (AbstractStep) getStepFactory("foo", "bar").getObject(); step.setName("step1"); job.addStep(step); step = (AbstractStep) getStepFactory("spam").getObject(); step.setName("step2"); job.addStep(step); JobExecution jobExecution = repository.createJobExecution(job.getName(), new JobParameters()); job.execute(jobExecution); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); assertEquals(3, written.size()); assertTrue(written.contains("foo")); }
@Test public void testAutoRegisterItemListenersNoDoubleCounting() throws Exception { SimpleStepFactoryBean<String, String> factory = getStepFactory(new String[] { "foo", "bar", "spam" }); final List<String> listenerCalls = new ArrayList<>(); class TestItemListenerWriter implements ItemWriter<String>, ItemWriteListener<String> { @Override public void write(List<? extends String> items) throws Exception { } @Override public void afterWrite(List<? extends String> items) { listenerCalls.add("write"); } @Override public void beforeWrite(List<? extends String> items) { } @Override public void onWriteError(Exception exception, List<? extends String> items) { } } TestItemListenerWriter itemWriter = new TestItemListenerWriter(); factory.setListeners(new StepListener[] { itemWriter }); factory.setItemWriter(itemWriter); Step step = factory.getObject(); job.setSteps(Collections.singletonList(step)); JobExecution jobExecution = repository.createJobExecution(job.getName(), new JobParameters()); job.execute(jobExecution); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); assertEquals("[write, write, write]", listenerCalls.toString()); }
@Test public void testSimpleJobWithItemListeners() throws Exception { SimpleStepFactoryBean<String, String> factory = getStepFactory(new String[] { "foo", "bar", "spam" }); factory.setItemWriter(new ItemWriter<String>() { @Override public void write(List<? extends String> data) throws Exception { throw new RuntimeException("Error!"); } }); factory.setListeners(new StepListener[] { new ItemListenerSupport<String, String>() { @Override public void onReadError(Exception ex) { listened.add(ex); } @Override public void onWriteError(Exception ex, List<? extends String> item) { listened.add(ex); } } }); Step step = factory.getObject(); job.setSteps(Collections.singletonList(step)); JobExecution jobExecution = repository.createJobExecution(job.getName(), new JobParameters()); job.execute(jobExecution); assertEquals("Error!", jobExecution.getAllFailureExceptions().get(0).getMessage()); assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); assertEquals(0, written.size()); // provider should be at second item assertEquals("bar", reader.read()); assertEquals(1, listened.size()); }
@Test public void testExceptionHandler() throws Exception { SimpleStepFactoryBean<String, String> factory = getStepFactory(new String[] { "foo", "bar", "spam" }); factory.setBeanName("exceptionStep"); SimpleLimitExceptionHandler exceptionHandler = new SimpleLimitExceptionHandler(1); exceptionHandler.afterPropertiesSet(); factory.setExceptionHandler(exceptionHandler); factory.setItemWriter(new ItemWriter<String>() { int count = 0; @Override public void write(List<? extends String> data) throws Exception { if (count++ == 0) { throw new RuntimeException("Foo"); } } }); AbstractStep step = (AbstractStep) factory.getObject(); job.setSteps(Collections.singletonList((Step) step)); JobExecution jobExecution = repository.createJobExecution(job.getName(), new JobParameters()); job.execute(jobExecution); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); }
steps.add(step2); job.setName("testJob"); job.setSteps(steps);
job.setSteps(Collections.singletonList((Step) step));