2013-06-17 2 views

Antwort

5

Wenn Sie nur SPEL verwenden, können Sie nicht auf die Job-ID zugreifen. Sie könnten einen JobExecutionListener verwenden, um ihn dem executionContext hinzuzufügen, und dann wäre er über das, was Sie versuchen, verfügbar.

+0

Können Sie Beispielcode/Links angeben? –

+0

Siehe ein funktionierendes Beispiel unter – emeraldjava

+0

@MichaelMinella Diese Antwort ist ziemlich alt, ich denke, es ist eine Aktualisierung wert. Sowohl '# {jobExecution.jobInstance.instanceId}' als auch '# {jobExecution.jobId}' haben den Wert der Instanz-ID für mich bereitgestellt. – jihor

3

Ein bearbeitetes Beispiel würde so aussehen. Ihre JobExecutionListener-Klasse hat Zugriff auf die JobExecution und kopiert die Job-ID in den executionContext.

public class JobIdToContextExecutionListener implements JobExecutionListener { 

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

    .. 
} 

In Ihrem Frühjahr Kontext können Sie dann die jobId über Spel Referenz wie

#{stepExecution.jobExecution.jobId} 

oder

#{jobExecutionContext.jobId} 

Luca's answer on referencing late-binding parameters here See.

1

#{stepExecution.jobExecution.id} oder #{stepExecution.jobExecutionId} sollte aber funktionieren.

Die StepContextbietet Zugriff auf die StepExecution für die späte Bindung über SpEL-Ausdrücke.

0

Verwenden Sie scope = "step" und dann einen Ausdruck in Ihrer Abfrage (oder ihren Parametern): # {stepExecution.jobExecution.id} (der Stamm des Ausdrucks ist ein StepContext).