Spring batch 如何使用spring表达式语言获取作业id?

Spring batch 如何使用spring表达式语言获取作业id?,spring-batch,Spring Batch,我想使用spring表达式语言获取作业id。我尝试了#{jobExecutionContext[jobId]},但它不起作用。仅使用SpEL无法访问作业id。您可以使用JobExecutionListener将其添加到executionContext,然后通过您正在尝试的内容将其可用。一个工作示例如下所示。JobExecutionListener类可以访问JobExecution,并将jobId复制到executionContext public class JobIdToContextExec

我想使用spring表达式语言获取作业id。我尝试了
#{jobExecutionContext[jobId]}
,但它不起作用。

仅使用SpEL无法访问作业id。您可以使用JobExecutionListener将其添加到executionContext,然后通过您正在尝试的内容将其可用。

一个工作示例如下所示。JobExecutionListener类可以访问JobExecution,并将jobId复制到executionContext

public class JobIdToContextExecutionListener implements JobExecutionListener {

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

    ..
}
在spring上下文中,您可以通过SpEL like引用jobId

#{stepExecution.jobExecution.jobId}

请参阅。

{stepExecution.jobExecution.id}
{stepExecution.jobExecutionId}
应该可以工作


确实提供了通过SpEL表达式访问StepExecution以进行后期绑定的功能。

使用scope=“step”,然后在查询中使用一个表达式(或其参数):{StepExecution.jobExecution.id}(表达式的根是StepContext)。

@MichaelMinella这个答案很旧,我认为值得更新。
{jobExecution.jobInstance.instanceId}
{jobExecution.jobId}
都为我提供了实例id的值。这应该是实际接受的答案。这在spring批处理文档及其工作中也有记录。
#{jobExecutionContext.jobId}