2014-02-07 50 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");