2013-06-17 8 views

risposta

5

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.

+0

Potete fornire codice/collegamenti di esempio? –

+0

Vedere un esempio funzionante sotto – emeraldjava

+0

@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

3

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.

1

#{stepExecution.jobExecution.id} o #{stepExecution.jobExecutionId} dovrebbe funzionare comunque.

Il StepContextfa fornire l'accesso a StepExecution per l'associazione tardiva tramite le espressioni SpEL.

0

Utilizzare scope = "step" e quindi un'espressione nella query (o i suoi parametri): # {stepExecution.jobExecution.id} (la radice dell'espressione è un StepContext).

Problemi correlati