2017-08-15 68 views
1

所以我觉得我已经正确定义了我的工作流程,但是当我运行它时,我得到一个FlowExecutionException,表示流程'd'中没有找到'下一个状态' 。Spring批处理流程 - 获取下一个状态

我使用实现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"); 
    } 
    } 

这是我的工作配置。我也想简化它(所有的步骤都会'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(); 
    } 

我知道我必须错过流程的某些部分,但我无法找到它。

回答

1

我相信我明白了。我需要使用'from'函数让我的配置知道我在哪里使用'on'(它当前认为我正在寻找每个'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(); 
    }