我有一条处理 csv 文件并将它们作为记录插入数据库的路线。由于它是一个巨大的 csv 文件,并且 Camel csv-splitter 内存不足,我们不得不编写自己的拆分器。我使用 ProducerTemplate 编写了拆分器。
处理 csv 的路径看起来有点像这样:
<route id="processCsvRoute">
<from ref="inbox" />
<to uri="bean:csvBean?method=process"/>
</route>
在 csvBean 中,我们进行拆分,最后为每个 csv 行执行以下 java 代码(一个 csv 行生成一个产品对象)。
producer.sendBodyAndHeader("direct:csvAggregator", product, "ID", csv.getFilename());
没有 csvAggregator-route 选择 csv:
<route id="csvAggregator">
<from uri="direct:csvAggregator" />
<aggregate strategyRef="exchangeAggregatorStrategy"
completionSize="10000"
completionInterval="10000"
parallelProcessing="true">
<correlationExpression>
<header>ID</header>
</correlationExpression>
<to uri="bean:batchInsertBean"/>
</aggregate>
</route>
有没有办法在 processCsvRoute 中定义聚合器?我的解决方案有效,但感觉不对,我必须为其创建单独的路线。
谢谢你的帮助。