如何使用spring表达式语言获取作业ID?

时间:2013-06-17 13:54:22

标签: spring-batch

我想使用spring表达式语言获得job id。我试过#{jobExecutionContext[jobId]},但它不起作用。

4 个答案:

答案 0 :(得分:5)

单独使用SpEL,无法访问作业ID。您可以使用JobExecutionListener将其添加到executionContext,然后通过您尝试的方式将其可用。

答案 1 :(得分:3)

一个有效的例子看起来像这样。您的JobExecutionListener类可以访问JobExecution,并将jobId复制到executionContext。

public class JobIdToContextExecutionListener implements JobExecutionListener {

    public void beforeJob(JobExecution jobExecution) {
        long jobId = jobExecution.getJobId();
        jobExecution.getExecutionContext().put("jobId",jobId);
    }

    ..
}

在您的春天环境中,您可以通过SpEL引用jobId,如

#{stepExecution.jobExecution.jobId}

#{jobExecutionContext.jobId}

请参阅Luca's answer on referencing late-binding parameters here

答案 2 :(得分:1)

#{stepExecution.jobExecution.id}#{stepExecution.jobExecutionId}应该可以使用。

StepContext 提供对StepExecution的访问,以便通过SpEL表达式进行后期绑定。

答案 3 :(得分:1)

使用范围="步骤"然后是查询(或其参数)中的表达式:#{stepExecution.jobExecution.id}(表达式的根是StepContext)。