我想使用spring表达式语言获得job id。我试过#{jobExecutionContext[jobId]}
,但它不起作用。
答案 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)。