Voglio ottenere l'id del lavoro utilizzando il linguaggio di espressione primaverile. Ho provato #{jobExecutionContext[jobId]}
ma non funziona.Come ottenere l'id del lavoro usando il linguaggio di espressione primaverile?
risposta
Utilizzando solo SpEL, non è possibile accedere all'ID lavoro. È possibile utilizzare un JobExecutionListener per aggiungerlo a executionContext e quindi sarebbe disponibile tramite ciò che si sta tentando.
Un esempio funzionante sarebbe simile a questo. La classe JobExecutionListener ha accesso a JobExecution e copia il jobId su executionContext.
public class JobIdToContextExecutionListener implements JobExecutionListener {
public void beforeJob(JobExecution jobExecution) {
long jobId = jobExecution.getJobId();
jobExecution.getExecutionContext().put("jobId",jobId);
}
..
}
nel vostro contesto primavera, si può quindi fare riferimento alla jobId via SPEL come
#{stepExecution.jobExecution.jobId}
o
#{jobExecutionContext.jobId}
Vedi Luca's answer on referencing late-binding parameters here.
#{stepExecution.jobExecution.id}
o #{stepExecution.jobExecutionId}
dovrebbe funzionare comunque.
Il StepContextfa fornire l'accesso a StepExecution per l'associazione tardiva tramite le espressioni SpEL.
Utilizzare scope = "step" e quindi un'espressione nella query (o i suoi parametri): # {stepExecution.jobExecution.id} (la radice dell'espressione è un StepContext).
Potete fornire codice/collegamenti di esempio? –
Vedere un esempio funzionante sotto – emeraldjava
@MichaelMinella Questa risposta è piuttosto vecchia, penso che valga la pena aggiornarla. Sia '# {jobExecution.jobInstance.instanceId}' che '# {jobExecution.jobId}' hanno fornito per me il valore dell'ID di istanza. – jihor