2017-08-15 20 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(); 
    }