2017-08-15 3 views
1

So habe ich das Gefühl, dass ich meinen Jobfluss richtig definiert habe, aber wenn ich ihn ausführe, erhalte ich eine FlowExecutionException, die besagt, dass mein 'Next state nicht im Flow' für den Flow 'd' gefunden wurde. .Spring Batch Flow - Der nächste Status wird nicht gefunden

Ich verwende einen Tasklet, die eine JobExecutionListener wie folgt implementiert, die wie beabsichtigt zu sein scheint:

@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"); 
    } 
    } 

Hier ist meine Job-Konfiguration. Ich würde es auch gerne vereinfachen (alle Schritte gehen nach "b", also möchte ich, dass es eine "Nachher" -Sache ist), aber ich möchte nur, dass es zuerst funktioniert.

@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(); 
    } 

Ich weiß, dass ich einen Teil des Flusses fehlen muss, aber ich kann es nicht lokalisieren.

Antwort

1

Ich glaube, ich habe es herausgefunden. Ich muss die "Von" -Funktion verwenden, um meine Konfiguration wissen zu lassen, wo ich 'an' benutze (derzeit denkt ich, dass ich für jeden einen 'exit status' suche. So würde es so aussehen:

@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(); 
    } 
Verwandte Themen