2014-02-07 6 views
5

Was genau ist ein ExecutionContext in Spring Batch? Was erlaubt uns das zu erreichen? Es scheint wie eine überladene Verwendung des Begriffs executionContext. Was ist der Unterschied zwischen den beiden "Kontexten" unten? Einer von ihnen hat jobParameters und der andere nur den Ausführungskontext. Aber der erste erhält jobParameters aus der StepExecution und nicht den Job. Es verwirrt mich. Wie viele verschiedene Arten von Ausführungskontexten gibt es?Confusion über die AusführungContexts in Spring Batch

chunkContext.getStepContext() 
         .getStepExecution().getJobParameters() 

chunkContext.getStepContext() 
       .getStepExecution().getJobExecution().getExecutionContext() 

Jede Erleuchtung, die Sie zur Verfügung stellen können, wäre eine große Hilfe.

Vielen Dank im Voraus.

Antwort

11

Innerhalb Spring Batch gibt es zwei ExecutionContexte. Der erste ist auf der Job-Ebene. Die zweite ist auf der Stufe Ebene. In jedem Fall dient der ExecutionContext als Speicherbereich für Informationen, die für diese Ebene relevant sind. Zum Beispiel wird im Ausführungskontext des Schritts der Status eines Schritts (wie viele Datensätze wurden gelesen usw.) typischerweise gespeichert, so dass der Leser und der Schreiber bei einem Neustart auf die korrekte Position zurückgesetzt werden können. Der ExecutionContext des Jobs wird normalerweise verwendet, um Informationen über Schritte hinweg zu teilen.

Mit dem, was Sie oben gesagt haben, ist das Abrufen von JobParameters von der StepExecution. Dies ist wirklich nur eine Abkürzung, um sie von der JobExecution zu bekommen. Was Sie in der ersten Zeile tun, ist die gleiche wie:

chunkContext.getStepContext() 
      .getStepExecution() 
      .getJobExecution() 
      .getJobParameters(); 

Die JobParameters auf dem ExecutionContext keinen Einfluss haben. Sie sind die Parameter, die an einen Job übergeben werden, ähnlich wie die String [] Args, die an einen public static void main(String[] args) übergeben werden.

Wo die Verwirrung liegt, ist der StepContext. Der StepContext dient als Wrapper für die StepExecution, mit der die Accessoren des StepScopes arbeiten können. Wenn beispielsweise konfigurieren, dass Sie einen Job mit einer Bohne wie folgt aus:

<beans:bean id="outputFile" 
    class="org.springframework.core.io.FileSystemResource" scope="step"> 
    <beans:constructor-arg value="#{jobParameters[outputFile]}" /> 
</beans:bean> 

Die #{jobParameters[outputFile]} wird in etwa StepContext.getJobParameters().getString("outputFile"); ausgewertet.

Verwandte Themen