私は春の表現言語を使用して仕事のIDを取得したい。私は#{jobExecutionContext[jobId]}
を試しましたが、動作しません。スプリング表現言語を使用してジョブIDを取得する方法は?
5
A
答えて
5
SpELだけを使用すると、ジョブIDにアクセスする方法がありません。 JobExecutionListenerを使用してexecuteContextにそれを追加すると、試行しているものから利用できるようになります。
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}(式のルートはステップコンテキストです)。
サンプルコード/リンクを提供できますか? –
以下の作業例を参照してください – emeraldjava
@MichaelMinellaこの回答は古く、私は更新する価値があると思います。 '#{jobExecution.jobInstance.instanceId}'と '#{jobExecution.jobId} 'は私のインスタンスIDの値を提供していました。 – jihor