@Test public void testBuildSplit() throws Exception { Flow flow = new FlowBuilder<Flow>("subflow").from(step1).end(); SimpleJobBuilder builder = new JobBuilder("flow").repository(jobRepository).start(step2); builder.split(new SimpleAsyncTaskExecutor()).add(flow).end(); builder.preventRestart().build().execute(execution); assertEquals(BatchStatus.COMPLETED, execution.getStatus()); assertEquals(2, execution.getStepExecutions().size()); }
private Flow processSplitNode(Deque<LabelledTaskNode> visitorDeque, SplitNode splitNode) { Deque<Flow> flows = new LinkedList<>(); //For each node in the split process it as a DSL flow. for (LabelledTaskNode taskNode : splitNode.getSeries()) { Deque<Flow> resultFlowDeque = new LinkedList<>(); flows.addAll(processSplitFlow(taskNode, resultFlowDeque)); } removeProcessedNodes(visitorDeque, splitNode); Flow nestedSplitFlow = new FlowBuilder.SplitBuilder<>( new FlowBuilder<Flow>("Split" + UUID.randomUUID().toString()), taskExecutor) .add(flows.toArray(new Flow[flows.size()])) .build(); FlowBuilder<Flow> taskAppFlowBuilder = new FlowBuilder<>("Flow" + UUID.randomUUID().toString()); if (this.hasNestedSplit) { this.splitFlows = flows.size(); int threadCorePoolSize = this.composedTaskProperties.getSplitThreadCorePoolSize(); Assert.isTrue(threadCorePoolSize >= this.splitFlows, "Split thread core pool size " + threadCorePoolSize + " should be equal or greater " + "than the depth of split flows " + (this.splitFlows +1) + "." + " Try setting the composed task property `splitThreadCorePoolSize`"); } return taskAppFlowBuilder.start(nestedSplitFlow).end(); }
@Bean public Job splitJob(@Qualifier("foo") Flow foo, @Qualifier("foo") Flow bar) { FlowBuilder<Flow> flowBuilder = new FlowBuilder<>("split"); Flow flow = flowBuilder.split(new SimpleAsyncTaskExecutor()) .add(foo, bar) .end(); return jobBuilderFactory.get("splitJob") .start(myStep1()) .next(myStep2()) .on("COMPLETED").to(flow) .end() .build(); } }
/** * @param executor a task executor to execute the split flows * @return a builder to enable fluent chaining */ public SplitBuilder<Q> split(TaskExecutor executor) { return new SplitBuilder<Q>(this, executor); }
/** * @param executor a task executor to execute the split flows * @return a builder to enable fluent chaining */ public SplitBuilder<Q> split(TaskExecutor executor) { return new SplitBuilder<Q>(this, executor); }
@Bean public Job job() { return jobBuilderFactory.get("job") .start(flow1()) .split(new SimpleAsyncTaskExecutor()).add(flow2()) .end() .build(); }
/** * @param executor a task executor to execute the split flows * @return a builder to enable fluent chaining */ public SplitBuilder<Q> split(TaskExecutor executor) { return new SplitBuilder<Q>(this, executor); }
@Bean public Job concurrentJob() { Flow splitFlow = new FlowBuilder<Flow>("splitflow").split(new SimpleAsyncTaskExecutor()).add(flow(), flow(), flow(), flow(), flow(), flow(), flow()).build(); return jobBuilderFactory.get("concurrentJob") .start(firstStep()) .next(stepBuilderFactory.get("splitFlowStep") .flow(splitFlow) .build()) .next(lastStep()) .build(); }
/** * @param executor a task executor to execute the split flows * @return a builder to enable fluent chaining */ public SplitBuilder<Q> split(TaskExecutor executor) { return new SplitBuilder<>(this, executor); }
@Test public void testBuildSplit_BATCH_2282() throws Exception { Flow flow1 = new FlowBuilder<Flow>("subflow1").from(step1).end(); Flow flow2 = new FlowBuilder<Flow>("subflow2").from(step2).end(); Flow splitFlow = new FlowBuilder<Flow>("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 testBuildSplitUsingStartAndAdd_BATCH_2346() throws Exception { Flow subflow1 = new FlowBuilder<Flow>("subflow1").from(step2).end(); Flow subflow2 = new FlowBuilder<Flow>("subflow2").from(step3).end(); Flow splitflow = new FlowBuilder<Flow>("splitflow").start(subflow1).split(new SimpleAsyncTaskExecutor()) .add(subflow2).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()); }