Apache camel:如何将sql结果拆分成组

时间:2013-04-30 00:06:41

标签: oracle apache-camel

如何在apache camel中分割sql查询的结果?假设您将获得1000行作为结果,并且您希望不是逐个处理它们,而是在组中,例如1组= 10行。

在Apache Camel配置之后查找具有给定RECORD_ID的记录,在下一步中,Camel“splitter”迭代第一个查询的结果并运行另一个查询。

例如,如果我们根据查询 db.query.select.active.record 得到1000行,那么第二个查询 db.query.select.compute.statistics 将运行1000x(对于先前查询的每一行)。由于性能不是最佳的,我们希望创建一组RECORD_ID例如:第一个查询将返回1000行,我们将其拆分为100个组(每组10行),然后我们只能运行查询100x。

示例配置:

<route>
    <from uri="seda:retrieveAlphaData" />
    <process ref="alphaResourceInitializer"/>
    <to uri="sql:{{db.query.select.active.record}}" />
    <camel:split>
        <camel:simple>${in.body}</camel:simple>
        <camel:setHeader headerName="recordId">
            <camel:simple>${in.body[RECORD_ID]}</camel:simple>
        </camel:setHeader>
        <setBody>
            <simple>${in.body[RECORD_NAME]}</simple>
        </setBody>
        <to uri="sql:{{db.query.select.compute.statistics}}" />
        <process ref="allActiveRecordDataFormatTransformer" />
        <camel:marshal ref="json" />
        <to uri="bean:activeRecordSdbPersister?method=processIt" />
    </camel:split>
</route>

1 个答案:

答案 0 :(得分:0)

在“sql:{{db.query.select.active.record}}”后拆分路由怎么样?结果可以发送到SEDA端点,您可以配置10个SEDA消费者,它们将同时处理10个记录