6

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

4

4 回答 4

4

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

于 2013-06-17T17:20:05.630 回答
3

一个工作的例子看起来像这样。您的 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 引用 jobId,例如

#{stepExecution.jobExecution.jobId}

或者

#{jobExecutionContext.jobId}

请参阅Luca 关于在此处引用后期绑定参数的答案

于 2014-09-18T08:59:23.580 回答
3

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

于 2017-08-05T04:50:52.290 回答
1

#{stepExecution.jobExecution.id}或者#{stepExecution.jobExecutionId}应该工作。

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

于 2015-01-14T22:37:43.223 回答