2014-02-07 51 views
5

Spring批處理執行上下文究竟是什麼?有什麼辦法可以讓我們做到?這看起來像是一個重載的術語executionContext。 下面兩個「上下文」有什麼區別?其中一個有jobParameters,另一個只是獲取執行上下文。但是第一個從StepExecution獲取jobParameters而不是工作。這讓我很困惑。那裏有多少種不同的執行上下文?Spring批處理執行上下文混淆

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

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

你可以提供任何啓示將是一個很大的幫助。

在此先感謝。

回答

11

在Spring批處理中有兩個ExecutionContexts。第一個是在工作層面。第二個是在步驟級別。在每種情況下,ExecutionContext都作爲與該級別相關的信息的存儲區域。例如,在Step的ExecutionContext中,通常會存儲步驟的狀態(讀取了多少個記錄等),以便在重新啓動時,讀寫器可以重置到正確的位置。作業的ExecutionContext通常用於跨步驟共享信息。

就這麼說,上面發佈的內容是從StepExecution獲取JobParameters。這實際上只是讓他們脫離JobExecution的捷徑。你在第一行做什麼是一樣的:

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

JobParameters對ExecutionContext沒有影響。他們是傳遞給工作的參數,就像傳遞給public static void main(String[] args)String []參數一樣。

如果出現混淆可能是StepContext。 StepContext作爲StepExecution的包裝器,允許StepScope的訪問器工作。例如,當你配置有這樣一個bean工作:

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

#{jobParameters[outputFile]}正在初步評估,以StepContext.getJobParameters().getString("outputFile");