Spring Batch:一个读取器,多个处理器和写入器 [英] Spring Batch: One reader, multiple processors and writers
问题描述
在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.result1
或CompositeResultBean.result2
的CompositeItemWriter
(请参阅
Your own writer is a CompositeItemWriter
that delegate to writer CompositeResultBean.result1
or CompositeResultBean.result2
(look at PropertyExtractingDelegatingItemWriter, maybe can help)
这篇关于Spring Batch:一个读取器,多个处理器和写入器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!