在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");
。