春のバッチで、複合アイテム プロセッサを構成する複数のアイテム プロセッサがある状況があります。同じステップで 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();
}
}