2016-05-20 12 views
0

Wie erhalte ich die ID der vorherigen Schrittausführung im nächsten Schritt eines Spring-Batch-Jobs?Wie erhalte ich die ID der vorherigen Schrittausführung im nächsten Schritt eines Spring-Batch-Jobs?

Ich versuche derzeit, mehrere Schritte für einen einzelnen Datensatz auszuführen und sie in verschiedenen Zeilen in einer Datenbank zu speichern.

Jeder Schritt (mit Ausnahme der ersten) liest die Ergebnisse der vorherigen Schritte und führt eine weitere Verarbeitung durch und speichert dann die aktualisierten Ergebnisse in einer neuen Zeile.

Ich habe einen benutzerdefinierten Leser, der aus der Datenbank liest, aber ich muss die ID der vorherigen Schrittausführung an den aktuellen Schritt übergeben, damit es das Repository entsprechend abfragen kann.

Wie kann ich das tun?

Antwort

1

Bitte beachten Sie folgende Schritte aus:

1.From aktuellen Schritt, Daten zu StepExecutionContext passieren.

2.From Aktuelle StepExecutionContext, übergeben Daten an JobExecutionContext (über eine listener)

3. JobExecutionContext wird über alle Stufen und auf diese Weise geteilt Sie jetzt Daten früherer Steps bekommen kann.

Alternative Ansatz wird diese Temperatur Schritt in DB Daten in einer Tabelle speichern mit Spalten als JobExecutionId,StepExecutionId,StepData

+0

Danke für die Antwort. Wäre es wichtig, die Informationen direkt im JobExecutionContext zu speichern? Ich tat dies mit @AfterStep und dann speicherte es direkt in den JobExecutionContext und es funktionierte korrekt –

+0

Ja selbst das würde funktionieren. Bitte akzeptieren Sie die Antwort :) – shankarsh15

0

Eine Option ist ein StepExecutionListener zu verwenden, die vor und nach dem Schritt ausgeführt wird, aufgerufen werden. Die Methode afterStep hat das Objekt StepExecution. Sie können diese StepExecution verwenden, um alle Parameter festzulegen, die Sie im nächsten Schritt benötigen.

Bsp .:

currentStep.registerStepExecutionListener(new StepExecutionListener() { 
     @Override 
     public void beforeStep(StepExecution stepExecution) {} 

     @Override 
     public ExitStatus afterStep(StepExecution stepExecution) { 
      nextStep.setParameter(stepExecution.getExecutionContext().getString(param) 
      return ExitStatus.COMPLETED; 
     } 
    });