2017-12-14 9 views
0

Spring 4.3 with Spring Batch 3.0.8。私のプロセッサがJobExecutionIdにアクセスできるようにしたい

プロセッサのジョブ実行IDへの参照が必要なので、出力オブジェクトの内部に配置して、データと一緒にdbに書き出すことができます。ここに私の設定があります。

blueReportJobExecutionListenerを追加しました。私には必要なJobExecution IDが与えられていますが、どうすればそれを私のblueReportItemProcessorに送信できますか?それがその価値を必要とするものです。

<bean id="blueReportJobExecutionListener" class="com.cloud.cost.listener.BlueReportJobExecutionListener" scope="prototype" /> 
<bean id="blueReportJobListener" class="com.cloud.cost.listener.BlueReportJobListener" scope="prototype" /> 
<bean id="blueReportStepListener" class="com.cloud.cost.listener.BlueReportStepListener" scope="prototype" /> 

<batch:job id="blueReportJob"> 
    <batch:step id="blueReportStep"> 
     <batch:tasklet> 
      <batch:chunk reader="blueReportCSVFileItemReader" processor="blueReportItemProcessor" writer="mysqlItemWriter" 
       commit-interval="2"> 
      </batch:chunk> 
     </batch:tasklet> 
     <batch:listeners> 
      <batch:listener ref="blueReportStepListener"/> 
     </batch:listeners> 
    </batch:step> 
    <batch:listeners> 
     <batch:listener ref="blueReportJobListener"/> 
     <batch:listener ref="**blueReportJobExecutionListener**"/> 
    </batch:listeners> 
</batch:job> 
+0

私は、キャッシュ・マネージャに値を追加することでこれを解決しました....「Spring-Batchネイティブ」の方法でこのギャップを埋める方法をまだ理解していません.... – JamesD

答えて

0

@Valueアノテーションを使用するだけでジョブの実行から値を取得できます。

@Value("#{jobExecutionContext['JOB_ID']}") 

ここで、JOB_IDは、リスナーでジョブIDを追加するために使用したキーです。

プロセッサスコープがステップとして定義されていることを確認してください。そうでない場合は、この値は自動実行されません。

関連する問題