diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/builder/FlowBuilder.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/builder/FlowBuilder.java index 672047d2c..e597b2bb3 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/builder/FlowBuilder.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/builder/FlowBuilder.java @@ -640,7 +640,7 @@ public class FlowBuilder { int counter = 0; State one = parent.currentState; Flow flow = null; - if (!(one instanceof FlowState)) { + if (!(one == null || one instanceof FlowState)) { FlowBuilder stateBuilder = new FlowBuilder(name + "_" + (counter++)); stateBuilder.currentState = one; flow = stateBuilder.build(); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/job/builder/FlowJobBuilderTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/job/builder/FlowJobBuilderTests.java index 2f7608af0..860df379c 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/job/builder/FlowJobBuilderTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/job/builder/FlowJobBuilderTests.java @@ -139,6 +139,17 @@ public class FlowJobBuilderTests { assertEquals(2, execution.getStepExecutions().size()); } + @Test + public void testBuildSplit_BATCH_2282() throws Exception { + Flow flow1 = new FlowBuilder("subflow1").from(step1).end(); + Flow flow2 = new FlowBuilder("subflow2").from(step2).end(); + Flow splitFlow = new FlowBuilder("splitflow").split(new SimpleAsyncTaskExecutor()).add(flow1, flow2).build(); + FlowJobBuilder builder = new JobBuilder("flow").repository(jobRepository).start(splitFlow).end(); + builder.preventRestart().build().execute(execution); + assertEquals(BatchStatus.COMPLETED, execution.getStatus()); + assertEquals(2, execution.getStepExecutions().size()); + } + @Test public void testBuildDecision() throws Exception { JobExecutionDecider decider = new JobExecutionDecider() {