关于Spring Batch中的executionContexts的困惑

时间:2014-02-07 13:29:09

标签: spring spring-batch

Spring批处理中的executionContext究竟是什么?如何处理它让我们做到了?这似乎是对executeContext一词的重载使用。 下面两个“上下文”之间有什么区别?其中一个有jobParameters,另一个只有获取执行上下文。但是第一个从StepExecution获得jobParameters而不是job。这让我很困惑。有多少种不同的执行上下文?

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

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

你能提供的任何启示都会有很大的帮助。

提前致谢。

1 个答案:

答案 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]}