Mule:db的精确用法:选择源属性

时间:2015-04-10 13:07:47

标签: mule mule-studio mule-component

将入站流作为AMQP连接器

<flow name="flow1">
  <amqp:inbound-endpoint responseTimeout="10000" exchangeName="INPUTEXCHANGE" queueName="INPUTQUEUE" routingKey="inputqueue" connector-ref="rabbitConnector" doc:name="AMQP"/>
  <set-variable variableName="dataCount" value="0" doc:name="Variable"></set-variable>
  <db:select config-ref="databaseConnector" target="#[flowVars.dataCount]" source="#{payload[0]['count(*)']}"  doc:name="Select">
                <db:parameterized-query><![CDATA[select count(*) from tablename]]></db:parameterized-query>
            </db:select>
    </flow>

当没有指定source时dataCount = [{count(*)= 10}],因为db select返回Map的List。什么应该是source属性的正确值,以便只为dataCount变量分配10。当指定payload [0] ['count(*)']时,它给出一个错误,即有效负载是byte [],实际上是AMQP返回的有效负载。

1 个答案:

答案 0 :(得分:2)

根据user guide,来源是:

  

用于获取用于计算参数的值的表达式。默认值为空,因此参数是根据有效负载“。

计算的

Source用于“提供”select语句参数,而不是用于后处理结果。

因此,删除source属性并使用以下选项计算流变量的计数:

<set-variable variableName="selectResult" value="#[[]]" />

<db:select config-ref="databaseConnector" target="#[flowVars.selectResult]">
    <db:parameterized-query><![CDATA[select count(*) from tablename]]></db:parameterized-query>
</db:select>

<set-variable variableName="dataCount"
              value="#[flowVars.selectResult[0]['count(*)']]" />