如何解决Spring Batch @BeforeContext无法执行
在春季批处理中,我有多个组成复合物料处理器的物料处理器。我需要在同一步骤中在两个处理器之间共享一些上下文数据。我找到了访问上下文的可行解决方案,如下所示。那就是说,有一个替代解决方案似乎更干净一些,但是它使用了@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将仅检查已注册为处理器的对象(在您的情况下为复合对象),而不是整个对象图。
您需要将任何组成处理器注册为侦听器,才能正常工作。以下链接可能会有所帮助:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。