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