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