Mule数据库连接器多个查询

时间:2017-06-07 04:03:54

标签: database mule

我正在运行多个选择查询,我希望它们一个接一个地运行。 在此示例中,我选择帐号,然后在以下查询中使用这些数字。查询是否会一个接一个地连续运行,即下一个查询仅在上一个查询完成后运行。我是否需要将它们包装在复合源中并将它们包装在事务中?那会是什么样的?

    <flow name="PopulateAccount">
          <db:select config-ref="dsConfig" doc:name="Get Account ID">
           <db:paramterized-query><![CDATA[

               SELECT ACC_NUM....
           </db:select>

           <custom-transformer class="com.vf.ListTransformer">

           <set-session-variable variableName="messageID" value="#[payload]" 
                              doc:name="Set Account IDs"/>


         <!-- The next query depends on the Account IDS from
               previous results in the session variable -->

        <db:select config-ref="dsConfig" doc:name="Get Account Detail">
           <db:paramterized-query><![CDATA[
               SELECT ACC_NAME,....
           </db:select>
         <custom-transformer class="com.vf.AccountsTransformer">

          <!-- More database operations ---> 
    </flow>

1 个答案:

答案 0 :(得分:0)

  

查询是否会一个接一个地连续运行

是的,只要您不采取任何措施并行运行它们,例如在单独的流中移动数据库组件并以异步方式调用它。

  

我是否需要将它们包装在复合源

不,尤其是如果您在第二个查询中使用第一个查询的结果(如您的示例中)

  

并将它们包装在交易中

为什么呢?您没有在示例中插入/更新任何内容。

  

那会是什么样的?

就像你的例子一样。我唯一要改变的是你存储第一个查询结果的方式。虽然使用set-variable没有任何问题,但我更喜欢使用richher来将组件的结果存储在变量中,而不是更改有效负载并在之后设置变量。

<flow name="testFlow">
    <enricher target="#[flowVars.messageID]" doc:name="Message Enricher">
        <db:select config-ref="MySQL_Configuration" doc:name="select ACC_NUM">
            <db:parameterized-query><![CDATA[SELECT ACC_NUM ...]]></db:parameterized-query>
        </db:select>
    </enricher>
</flow>