Spring Batch:一个读取器,多个处理器和写入器 [英] Spring Batch: One reader, multiple processors and writers

查看:853
本文介绍了Spring Batch:一个读取器,多个处理器和写入器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

In Spring batch I need to pass the items read by an ItemReader to two different processors and writer. What I'm trying to achieve is that...


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

这是必需的,因为与ItemWriter#2编写的项目相比,ItemWriter#1编写的项目应以完全不同的方式进行处理. 而且,ItemReader会从数据库读取项目,并且它执行的查询的计算量很大,因此应丢弃两次执行相同查询的操作.

This is needed because items written by ItemWriter#1 should be processed in a completely different way compared to the ones written by ItemWriter#2. Moreover, ItemReader reads item from a database, and the queries it executes are so computational expensive that executing the same query twice should be discarded.

关于如何实现这种设置的任何提示?还是至少在逻辑上等效?

Any hint about how to achieve such set up ? Or, at least, a logically equivalent set up ?

推荐答案

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

This solution is valid if your item should be processed by processor #1 and processor #2

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

You have to create a processor #0 with this signature:

class Processor0<Item, CompositeResultBean>

其中CompositeResultBean是定义为

class CompositeResultBean {
  Processor1ResultBean result1;
  Processor2ResultBean result2;
}

在您的#0处理器中,将工作委派给#1和#2处理器,然后将结果放入CompositeResultBean

In your Processor #0 just delegate work to processors #1 and #2 and put result in CompositeResultBean

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

您自己的作者是代表作者CompositeResultBean.result1CompositeResultBean.result2CompositeItemWriter(请参阅

Your own writer is a CompositeItemWriter that delegate to writer CompositeResultBean.result1 or CompositeResultBean.result2 (look at PropertyExtractingDelegatingItemWriter, maybe can help)

这篇关于Spring Batch:一个读取器,多个处理器和写入器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆