2013-06-17 17 views

答えて

5

SpELだけを使用すると、ジョブIDにアクセスする方法がありません。 JobExecutionListenerを使用してexecuteContextにそれを追加すると、試行しているものから利用できるようになります。

+0

サンプルコード/リンクを提供できますか? –

+0

以下の作業例を参照してください – emeraldjava

+0

@MichaelMinellaこの回答は古く、私は更新する価値があると思います。 '#{jobExecution.jobInstance.instanceId}'と '#{jobExecution.jobId} 'は私のインスタンスIDの値を提供していました。 – jihor

3

実例は次のようになります。 JobExecutionListenerクラスはJobExecutionへのアクセス権を持ち、jobIdをexecutionContextにコピーします。あなたの春の文脈では

public class JobIdToContextExecutionListener implements JobExecutionListener { 

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

    .. 
} 

#{stepExecution.jobExecution.jobId} 

または

#{jobExecutionContext.jobId} 

Luca's answer on referencing late-binding parameters hereを参照してくださいように、あなたはその後、SPEL経由でジョブIDを参照することができます。

1

#{stepExecution.jobExecution.id}または#{stepExecution.jobExecutionId}でも動作します。

StepContextは、SpEL式によるレイトバインディングのステップ実行にアクセスできます。

0

スコープ= "ステップ"を使用し、次にクエリ(またはそのパラメータ)の式を使用します。#{stepExecution.jobExecution.id}(式のルートはステップコンテキストです)。