Spring Batch 流程 - 获取未找到的下一个状态

Loc*_*cke 1 java spring spring-batch

所以我觉得我已经正确定义了我的作业流程,但是当我运行它时,我收到一个 FlowExecutionException ,说我的流程“d”的“在流程中找不到下一个状态”。

我正在使用一个实现 JobExecutionListener 的 tasklet,如下所示,它似乎按预期工作:

  @Override
  public ExitStatus afterStep(StepExecution stepExecution) {
    if(a && b) {
      return new ExitStatus("a");
    } else if(c) {
      return new ExitStatus("b");
    } else if(d) {
      return new ExitStatus("c");
    } else {
      return new ExitStatus("d");
    }
  }
Run Code Online (Sandbox Code Playgroud)

这是我的工作配置。我还想简化它(所有步骤都将进行“b”,所以我希望这是“之后”的事情),但只是希望它首先工作。

  @Bean
  public Job job() {
    LOGGER.info("STARTING BATCH JOB");
    return jobs.get("job")
        .incrementer(new RunIdIncrementer())
        .start(taskletStep())
        .on("a")
            .to(step1a)
            .next(step2)
        .on("b")
            .to(step2)
        .on("c")
            .to(step2)
        .on("d")
            .to(step1b)
            .next(step2)
        .on("*").end()
        .end()
        .build();
  }
Run Code Online (Sandbox Code Playgroud)

我知道我一定错过了流程的某些部分,但我无法确定它。

Loc*_*cke 5

我相信我已经弄清楚了。我需要使用“from”函数让我的配置知道我在哪里使用“on”from(它目前认为我正在为每个函数寻找“step2”的退出状态。所以它看起来像这样:

  @Bean
  public Job job() {
    LOGGER.info("STARTING BATCH JOB");
    return jobs.get("job")
        .incrementer(new RunIdIncrementer())
        .start(taskletStep())
        .on("a")
            .to(step1a)
            .next(step2)
        .from(taskletStep())            
        .on("b")
            .to(step2)
        .from(taskletStep()) 
        .on("c")
            .to(step2)
        .from(taskletStep()) 
        .on("d")
            .to(step1b)
            .next(step2)
        .end()
        .build();
  }
Run Code Online (Sandbox Code Playgroud)