Spring批处理中的executionContext究竟是什么?如何处理它让我们做到了?这似乎是对executeContext一词的重载使用。 下面两个“上下文”之间有什么区别?其中一个有jobParameters,另一个只有获取执行上下文。但是第一个从StepExecution获得jobParameters而不是job。这让我很困惑。有多少种不同的执行上下文?
chunkContext.getStepContext()
.getStepExecution().getJobParameters()
chunkContext.getStepContext()
.getStepExecution().getJobExecution().getExecutionContext()
你能提供的任何启示都会有很大的帮助。
提前致谢。
答案 0 :(得分:15)
在Spring Batch中有两个ExecutionContexts。第一个是工作级别。第二个是步骤级别。在每种情况下,ExecutionContext都用作与该级别相关的信息的存储区域。例如,在Step的ExecutionContext中,通常存储步骤的状态(已读取的记录数等),以便在重新启动时可以将读取器和写入器重置到正确的位置。 Job的ExecutionContext通常用于跨步骤共享信息。
话虽如此,在上面发布的内容是从StepExecution获取JobParameters。这实际上只是从JobExecution获取它们的捷径。你在第一行做的是:
chunkContext.getStepContext()
.getStepExecution()
.getJobExecution()
.getJobParameters();
JobParameters与ExecutionContext无关。它们是传递给作业的参数,就像传递给String []
的{{1}} args一样。
可能存在的混淆是StepContext。 StepContext用作StepExecution的包装器,允许StepScope的访问器工作。例如,使用如下所示的bean配置作业时:
public static void main(String[] args)
<beans:bean id="outputFile"
class="org.springframework.core.io.FileSystemResource" scope="step">
<beans:constructor-arg value="#{jobParameters[outputFile]}" />
</beans:bean>
正在粗略评估为#{jobParameters[outputFile]}
。