@Test public void testBuildDecision() throws Exception { JobExecutionDecider decider = new JobExecutionDecider() { private int count = 0; @Override public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { count++; return count<2 ? new FlowExecutionStatus("ONGOING") : FlowExecutionStatus.COMPLETED; } }; step1.setAllowStartIfComplete(true); SimpleJobBuilder builder = new JobBuilder("flow").repository(jobRepository).start(step1); builder.next(decider).on("COMPLETED").end().from(decider).on("*").to(step1).end(); builder.preventRestart().build().execute(execution); assertEquals(BatchStatus.COMPLETED, execution.getStatus()); assertEquals(2, execution.getStepExecutions().size()); }
@Bean public Job job() { return jobBuilderFactory.get("job") .start(startStep()) .next(decider()) .from(decider()).on("ODD").to(oddStep()) .from(decider()).on("EVEN").to(evenStep()) .from(oddStep()).on("*").to(decider()) // .from(decider()).on("ODD").to(oddStep()) // .from(decider()).on("EVEN").to(evenStep()) .end() .build(); }
/** * If a flow should start with a decision use this as the first state. * * @param decider the to start from * @return a builder to enable chaining */ public UnterminatedFlowBuilder<Q> start(JobExecutionDecider decider) { doStart(decider); return new UnterminatedFlowBuilder<Q>(this); }
/** * Start again from a decision that was already registered. * * @param decider the decider to start from (already registered) * @return a builder to enable chaining */ public UnterminatedFlowBuilder<Q> from(JobExecutionDecider decider) { doFrom(decider); return new UnterminatedFlowBuilder<Q>(this); }
/** * If a flow should start with a decision use this as the first state. * * @param decider the to start from * @return a builder to enable chaining */ public UnterminatedFlowBuilder<Q> start(JobExecutionDecider decider) { doStart(decider); return new UnterminatedFlowBuilder<Q>(this); }
/** * Start again from a decision that was already registered. * * @param decider the decider to start from (already registered) * @return a builder to enable chaining */ public UnterminatedFlowBuilder<Q> from(JobExecutionDecider decider) { doFrom(decider); return new UnterminatedFlowBuilder<Q>(this); }
/** * Transition to the decider on successful completion of the current step. All other outcomes are treated as * failures. * * @param decider the JobExecutionDecider to determine the next step to execute * @return this to enable chaining */ public UnterminatedFlowBuilder<Q> next(JobExecutionDecider decider) { doNext(decider); return new UnterminatedFlowBuilder<Q>(this); }
/** * Transition to the decider on successful completion of the current step. All other outcomes are treated as * failures. * * @param decider the JobExecutionDecider to determine the next step to execute * @return this to enable chaining */ public UnterminatedFlowBuilder<Q> next(JobExecutionDecider decider) { doNext(decider); return new UnterminatedFlowBuilder<Q>(this); }
/** * If a flow should start with a decision use this as the first state. * * @param decider the to start from * @return a builder to enable chaining */ public UnterminatedFlowBuilder<Q> start(JobExecutionDecider decider) { doStart(decider); return new UnterminatedFlowBuilder<Q>(this); }
/** * Transition to the decider on successful completion of the current step. All other outcomes are treated as * failures. * * @param decider the JobExecutionDecider to determine the next step to execute * @return this to enable chaining */ public UnterminatedFlowBuilder<Q> next(JobExecutionDecider decider) { doNext(decider); return new UnterminatedFlowBuilder<Q>(this); }
/** * Start again from a decision that was already registered. * * @param decider the decider to start from (already registered) * @return a builder to enable chaining */ public UnterminatedFlowBuilder<Q> from(JobExecutionDecider decider) { doFrom(decider); return new UnterminatedFlowBuilder<Q>(this); }
/** * Transition to the decider on successful completion of the current step. All other outcomes are treated as * failures. * * @param decider the JobExecutionDecider to determine the next step to execute * @return this to enable chaining */ public UnterminatedFlowBuilder<Q> next(JobExecutionDecider decider) { doNext(decider); return new UnterminatedFlowBuilder<>(this); }
/** * Start again from a decision that was already registered. * * @param decider the decider to start from (already registered) * @return a builder to enable chaining */ public UnterminatedFlowBuilder<Q> from(JobExecutionDecider decider) { doFrom(decider); return new UnterminatedFlowBuilder<>(this); }
/** * If a flow should start with a decision use this as the first state. * * @param decider the to start from * @return a builder to enable chaining */ public UnterminatedFlowBuilder<Q> start(JobExecutionDecider decider) { doStart(decider); return new UnterminatedFlowBuilder<>(this); }