Spring Batch:一个读取器、多个处理器和写入器

2024-05-23

在 Spring 批处理中,我需要将 ItemReader 读取的项目传递给两个不同的处理器和编写器。我想要实现的是......



                        +---> ItemProcessor#1 ---> ItemWriter#1
                        |
ItemReader ---> item ---+
                        |
                        +---> ItemProcessor#2 ---> ItemWriter#2
  

这是必需的,因为与 ItemWriter#2 写入的项目相比,由 ItemWriter#1 写入的项目应该以完全不同的方式进行处理。 此外,ItemReader 从数据库中读取项目,并且它执行的查询的计算量非常大,因此应该放弃执行同一查询两次。

有关如何实现此类设置的任何提示?或者,至少是逻辑上等效的设置?


如果您的商品应由处理器 #1 和处理器 #2 处理,则此解决方案有效

您必须使用以下签名创建处理器#0:

class Processor0<Item, CompositeResultBean>

where CompositeResultBean是一个 bean 定义为

class CompositeResultBean {
  Processor1ResultBean result1;
  Processor2ResultBean result2;
}

在处理器 #0 中,只需将工作委托给处理器 #1 和 #2 并将结果放入CompositeResultBean

CompositeResultBean Processor0.process(Item item) {
  final CompositeResultBean r = new CompositeResultBean();
  r.setResult1(processor1.process(item));
  r.setResult2(processor2.process(item));
  return r;
}

你自己的作家是CompositeItemWriter委托给作家CompositeResultBean.result1 or CompositeResultBean.result2(看着PropertyExtractingDelegatingItemWriter http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/adapter/PropertyExtractingDelegatingItemWriter.html,也许可以帮忙)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Batch:一个读取器、多个处理器和写入器 的相关文章

随机推荐