diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java index f2a5ca336..d4413796e 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java @@ -139,7 +139,7 @@ public class SimpleStepFactoryBean extends AbstractStepFactoryBean { } /** - * Public setter for the SimpleLimitExceptionHandler. + * Public setter for the {@link ExceptionHandler}. * @param exceptionHandler the exceptionHandler to set */ public void setExceptionHandler(ExceptionHandler exceptionHandler) { @@ -233,6 +233,8 @@ public class SimpleStepFactoryBean extends AbstractStepFactoryBean { repeatTemplate.setTaskExecutor(taskExecutor); stepOperations = repeatTemplate; } + + stepOperations.setExceptionHandler(exceptionHandler); step.setStepOperations(stepOperations); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SimpleStepFactoryBeanTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SimpleStepFactoryBeanTests.java index 8c6fb59c0..720f8e82f 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SimpleStepFactoryBeanTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SimpleStepFactoryBeanTests.java @@ -42,6 +42,7 @@ import org.springframework.batch.item.ItemWriter; import org.springframework.batch.item.support.ListItemReader; import org.springframework.batch.repeat.RepeatContext; import org.springframework.batch.repeat.exception.ExceptionHandler; +import org.springframework.batch.repeat.exception.SimpleLimitExceptionHandler; import org.springframework.batch.repeat.policy.SimpleCompletionPolicy; import org.springframework.batch.repeat.support.RepeatTemplate; import org.springframework.batch.support.transaction.ResourcelessTransactionManager; @@ -195,6 +196,29 @@ public class SimpleStepFactoryBeanTests extends TestCase { assertEquals(BatchStatus.FAILED, jobExecution.getStatus()); } + public void testExceptionHandler() throws Exception { + SimpleStepFactoryBean factory = getStepFactory(new String[] { "foo", "bar", "spam" }); + factory.setBeanName("exceptionStep"); + factory.setExceptionHandler(new SimpleLimitExceptionHandler(1)); + factory.setItemWriter(new AbstractItemWriter() { + int count = 0; + + public void write(Object data) throws Exception { + if (count++ == 0) { + throw new RuntimeException("Foo"); + } + } + }); + AbstractStep step = (AbstractStep) factory.getObject(); + job.setSteps(Collections.singletonList(step)); + + JobExecution jobExecution = repository.createJobExecution(job, new JobParameters()); + + job.execute(jobExecution); + + assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); + } + public void testChunkListeners() throws Exception { String[] items = new String[] { "1", "2", "3", "4", "5", "6", "7" }; int commitInterval = 3; @@ -260,7 +284,8 @@ public class SimpleStepFactoryBeanTests extends TestCase { public void testCommitIntervalAndCompletionPolicyBothSet() throws Exception { SimpleStepFactoryBean factory = getStepFactory("foo"); - // but exception expected after setting commit interval and completion policy + // but exception expected after setting commit interval and completion + // policy factory.setCommitInterval(1); factory.setChunkCompletionPolicy(new SimpleCompletionPolicy(2)); try {