diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/policy/CompletionPolicySupport.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/policy/CompletionPolicySupport.java index 600796db1..c96eb9fcc 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/policy/CompletionPolicySupport.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/policy/CompletionPolicySupport.java @@ -30,13 +30,19 @@ import org.springframework.batch.repeat.context.RepeatContextSupport; public class CompletionPolicySupport implements CompletionPolicy { /** - * Delegate to {@link #isComplete(RepeatContext)}. + * Return true if exit status is not continuable, otherwise + * delegate to {@link #isComplete(RepeatContext)}. * * @see org.springframework.batch.repeat.CompletionPolicy#isComplete(org.springframework.batch.repeat.RepeatContext, * ExitStatus) */ public boolean isComplete(RepeatContext context, ExitStatus result) { - return isComplete(context); + if (result != null && !result.isContinuable()) { + return true; + } + else { + return isComplete(context); + } } /** diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/repeat/policy/TimeoutCompletionPolicyTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/repeat/policy/TimeoutCompletionPolicyTests.java index 453246142..926db410a 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/repeat/policy/TimeoutCompletionPolicyTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/repeat/policy/TimeoutCompletionPolicyTests.java @@ -18,6 +18,7 @@ package org.springframework.batch.repeat.policy; import junit.framework.TestCase; +import org.springframework.batch.repeat.ExitStatus; import org.springframework.batch.repeat.RepeatContext; public class TimeoutCompletionPolicyTests extends TestCase { @@ -35,6 +36,12 @@ public class TimeoutCompletionPolicyTests extends TestCase { RepeatContext context = policy.start(null); assertFalse(policy.isComplete(context, null)); } + + public void testNonContinuableResult() throws Exception { + TimeoutTerminationPolicy policy = new TimeoutTerminationPolicy(); + ExitStatus result = new ExitStatus(false, "non-continuable exit status"); + assertTrue(policy.isComplete(policy.start(null), result)); + } public void testUpdate() throws Exception { TimeoutTerminationPolicy policy = new TimeoutTerminationPolicy(20L);