0

春のバッチで、複合アイテム プロセッサを構成する複数のアイテム プロセッサがある状況があります。同じステップで 2 つのプロセッサ間でコンテキスト データを共有する必要があります。以下に示すように、コンテキストにアクセスするための実用的なソリューションを見つけました。それは、少しきれいに見える別の解決策があると言いましたが、それは決して呼び出されない @BeforeStepAnnotation を使用します。可能であれば、2番目のソリューションを使用したいと思います。これを行う方法についてのアドバイスは大歓迎です。

これは機能します:

@Component
@StepScope
public class MyItemProcessor implements ItemProcessor<String,String> {

   @Value(#{stepExecution});
   private StepExecution stepExecution;


   public String process(String s){
     //Do things

     Context context = new Context();
     context.set("Hello Context");

     ExecutionContext executionContext = stepExecution.getExecutionContext();
     executionContext.put("Context", context);

   }

}

これは失敗します:

@Component
@StepScope
public class MyItemProcessor implements ItemProcessor<String,String> {

   private ExecutionContext executionContext;

   public String process(String s){
      //Do things
      Context context = new Context();
      context.set("Hello Context");

      executionContext.put("Context", context);
   } 


   @BeforeStep
   public getCurrentContext(StepExecution stepExecution){
         executionContext = stepExecution.getExecutionContext();
   } 

}
4

1 に答える 1