24

我想在我的班级中检索JobParameterJobExecutionContext反对。ItemWriter如何进行?

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

提前致谢。

4

4 回答 4

23

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

从 Spring Batch 2 开始,您有另一种选择:您可以将 Job Parameters 和 Job Execution Context 中的任何条目注入到您的项目编写器中。使您的项目编写器具有step范围,然后使用表达式#{jobParameters['theKeyYouWant']}#{jobExecutionContext['someOtherKey']}为您的项目编写器注入值。

于 2013-02-19T06:04:24.417 回答
21

在单步处理之前使用@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();
    }
}
于 2015-04-23T23:19:35.287 回答
9

补充一下 Adrian Shum 的回答,如果要避免将每个作业参数作为类属性注入,可以直接注入Mapof JobParameters,如下所示:

@Value("#{jobParameters}")
private Map<String, JobParameter> jobParameters;
于 2015-09-13T08:15:13.880 回答
6

如果您使用的是 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 类相同。

于 2017-07-07T09:34:23.560 回答