如何在ItemWriter中获取JobParameter和JobExecutionContext?

时间:2013-02-19 04:42:29

标签: spring-batch

我想在JobParameter课程中检索JobExecutionContextItemWriter个对象。 如何进行?

我尝试实现StepExecutionListener,我只是调用父类方法。但它没有成功。

提前致谢。

4 个答案:

答案 0 :(得分:18)

实现StepExecutionListener是一种方法。事实上,这是Spring Batch 1.x的唯一方法。

从Spring Batch 2开始,您还有另一种选择:您可以将作业参数和作业执行上下文中的任何条目注入项目编写者。使您的项目编写者具有step范围,然后使用#{jobParameters['theKeyYouWant']}#{jobExecutionContext['someOtherKey']}等表达式为您的项目编写者注入值。

答案 1 :(得分:11)

使用@BeforeStep注释在步骤处理之前调用方法。

//From the StepExecution get the current running JobExecution object.
public class MyDataProcessor implements ItemProcessor<MyDataRow, MyDataRow> {
    private JobExecution jobExecution;

    @BeforeStep
    public void beforeStep(StepExecution stepExecution) {
        jobExecution = stepExecution.getJobExecution();
    }
}

答案 2 :(得分:7)

要添加到Adrian Shum的答案,如果要避免将每个作业参数作为类属性注入,可以按如下方式直接注入Map JobParameter

@Value("#{jobParameters}")
private Map<String, JobParameter> jobParameters;

答案 3 :(得分:3)

如果您使用的是Spring配置文件,则可以使用以下命令访问StepExecution对象:

<bean id="aaaReader" class="com.AAAReader" scope="step">
    <property name="stepExecution" value="#{stepExecution}" />
</bean>

在AAAReader类中,您需要创建适当的字段和设置器:

private StepExecution stepExecution;

public void setStepExecution(final StepExecution stepExecution) {
    this.stepExecution = stepExecution;
}

对于Processor和Writer类也是如此。