Spring 批处理@BeforeContext 执行失败

Spring Batch @BeforeContext Fails to Execute

我在 spring 批处理中有一个情况,我有多个项目处理器组成一个复合项目处理器。我需要在同一步骤中在两个处理器之间共享一些上下文数据。我找到了一个访问上下文的有效解决方案,如下所示。也就是说,有一个替代解决方案看起来更简洁,但它使用了永远不会被调用的@BeforeStepAnnotation。如果可能的话,我想使用第二种解决方案。非常感谢任何有关如何执行此操作的建议。

这个有效:

@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();
   } 

}

由于您的项目处理器是组合的一部分,因此不会对 @BeforeStep 注释进行内省,因此它不会注册为侦听器。 Spring Batch 只会自省注册为处理器的对象(在您的情况下是复合对象),而不是整个对象图。

您需要将任何组合处理器注册为侦听器才能正常工作。以下链接可能会有所帮助: