Ich möchte Job-ID mit Federausdruck Sprache erhalten. Ich habe versucht #{jobExecutionContext[jobId]}
, aber es funktioniert nicht.Wie bekomme ich die Job-ID mit der Federausdrucksprache?
Antwort
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.
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.
#{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.
Verwenden Sie scope = "step" und dann einen Ausdruck in Ihrer Abfrage (oder ihren Parametern): # {stepExecution.jobExecution.id} (der Stamm des Ausdrucks ist ein StepContext).
Können Sie Beispielcode/Links angeben? –
Siehe ein funktionierendes Beispiel unter – emeraldjava
@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