我希望我的处理器能够访问JobExecutionId

时间:2017-12-14 22:41:56

标签: spring spring-batch

Spring 4.3 with Spring Batch 3.0.8。

我希望在处理器中引用作业执行ID,因此我可以将其放在输出对象中,并将其与数据一起写入db。这是我的设置如下。

我添加了blueReportJobExecutionListener,它为我提供了我需要的JobExecution ID ....但是如何将它发送到我的blueReportItemProcessor?那是需要这个价值的对象。

<bean id="blueReportJobExecutionListener" class="com.cloud.cost.listener.BlueReportJobExecutionListener" scope="prototype" />
<bean id="blueReportJobListener" class="com.cloud.cost.listener.BlueReportJobListener" scope="prototype" />
<bean id="blueReportStepListener" class="com.cloud.cost.listener.BlueReportStepListener" scope="prototype" />

<batch:job id="blueReportJob">
    <batch:step id="blueReportStep">
        <batch:tasklet>
            <batch:chunk reader="blueReportCSVFileItemReader" processor="blueReportItemProcessor" writer="mysqlItemWriter"
                commit-interval="2">
            </batch:chunk>
        </batch:tasklet>
        <batch:listeners>
            <batch:listener ref="blueReportStepListener"/>
        </batch:listeners>
    </batch:step>
    <batch:listeners>
        <batch:listener ref="blueReportJobListener"/>
        <batch:listener ref="**blueReportJobExecutionListener**"/>
    </batch:listeners>
</batch:job>

1 个答案:

答案 0 :(得分:0)

您只需使用@Value注释即可从Job Execution获取值。

@Value("#{jobExecutionContext['JOB_ID']}")

其中JOB_ID是您在侦听器中用于添加作业ID的键。

确保您的处理器范围定义为步骤,否则此值将不会自动装配。