2016-04-26 4 views
2

Ich muss basierend auf einer Bedingung in Schritt1 des Jobs entscheiden, welcher Schritt als nächstes aufgerufen wird.Feder-Batch: Bedingter Fluss

Bitte beachten Sie: In Step1 verwende ich rein tasklet Ansatz. Beispiel:

<step id="step1"> 
    <tasklet ref="example"> 
</step> 

Bitte helfen, wie ich einige Code in Beispiel setzen können Tasklet oder eine Konfiguration machen den nächsten Schritt zu entscheiden, genannt zu werden?

habe ich schon sah in https://docs.spring.io/spring-batch/reference/html/configureStep.html

Antwort

3

Sie Flusssteuerung in Ihrem Kontext-Datei wie so diktieren:

<step id="step1"> 
    <tasklet ref="example"> 
    <next on="COMPLETED" to="step2" /> 
    <end on="NO-OP" /> 
    <fail on="*" /> 
    <!-- 
     You generally want to Fail on * to prevent 
     accidentally doing the wrong thing 
    --> 
</step> 

Dann in Ihrem Tasklet, stellen Sie den ExitStatus von StepExecutionListener

public class SampleTasklet implements Tasklet, StepExecutionListener { 

    @Override 
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { 
     // do something 
     return RepeatStatus.FINISHED; 
    } 

    @Override 
    public void beforeStep(StepExecution stepExecution) { 
     // no-op 
    } 

    @Override 
    public ExitStatus afterStep(StepExecution stepExecution) { 
     //some logic here 
     boolean condition1 = false; 
     boolean condition2 = true; 

     if (condition1) { 
      return new ExitStatus("COMPLETED"); 
     } else if (condition2) { 
      return new ExitStatus("FAILED"); 
     } 

     return new ExitStatus("NO-OP"); 
    } 

} 
Umsetzung