首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让Mule将JDBC查询中的多行作为单个事务返回?

如何让Mule将JDBC查询中的多行作为单个事务返回?
EN

Stack Overflow用户
提问于 2012-12-05 05:08:34
回答 2查看 2.6K关注 0票数 0

如果我在Oracle表中有100行,我希望收到一封正文中有100行的电子邮件,但我会收到100封电子邮件,每行一封……我认为transactionPerMessage可以做到这一点(工具提示说,“如果为false,则整个结果集将只有一个事务”),但无论我将其设置为true还是false,都没有区别。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:smtp="http://www.mulesoft.org/schema/mule/smtp" xmlns:jbossts="http://www.mulesoft.org/schema/mule/jbossts" xmlns:jdbc="http://www.mulesoft.org/schema/mule/jdbc" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="CE-3.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/smtp http://www.mulesoft.org/schema/mule/smtp/current/mule-smtp.xsd 
http://www.mulesoft.org/schema/mule/jdbc http://www.mulesoft.org/schema/mule/jdbc/current/mule-jdbc.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/jbossts http://www.mulesoft.org/schema/mule/jbossts/current/mule-jbossts.xsd ">
    <jdbc:oracle-data-source name="Oracle_Data_Source" user="test" password="test" url="jdbc:oracle:thin:@//ora:1530/TEST.EXAMPLE.COM" transactionIsolation="UNSPECIFIED" doc:name="Oracle Data Source"/>
    <jdbc:connector name="Database" dataSource-ref="Oracle_Data_Source" validateConnections="true" transactionPerMessage="false" queryTimeout="-1" pollingFrequency="5000" doc:name="Database"/>
    <flow name="Ross_invoice_Workflow2Flow1" doc:name="Ross_invoice_Workflow2Flow1">
        <jdbc:inbound-endpoint queryKey="GetUnprocessedInvoices" queryTimeout="-1" pollingFrequency="1000" connector-ref="Database" doc:name="Database">
            <jdbc:query key="GetUnprocessedInvoices" value="SELECT        INVOICE_NUMBER FROM            FIN.LHF_INVOICE_WORKFLOW&#13;&#10;WHERE        (STATUS_FLAG = 'N')"/>
        </jdbc:inbound-endpoint>
        <echo-component doc:name="Echo"/>
        <smtp:outbound-endpoint host="mail.example.com" to="test@example.com" from="mule@example.com" subject="invoice test" responseTimeout="10000" doc:name="SMTP"/>
    </flow>
</mule>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-05 08:14:00

让Mule像当前一样每行创建一条消息,然后使用聚合器按100对消息进行分组。您还必须在聚合器上为最后一个可能不会达到100的组配置超时(除非您的记录数始终是100的倍数)。

票数 1
EN

Stack Overflow用户

发布于 2013-04-10 03:37:39

如果您还将端点上的transactionPerMessage属性设置为"true“,并添加如下事务,那么在连接器上将transactionPerMessage设置为"false”应该是可行的:

代码语言:javascript
复制
<jdbc:inbound-endpoint queryKey="GetUnprocessedInvoices" queryTimeout="-1"   pollingFrequency="1000" connector-ref="Database" doc:name="Database">
    <jdbc:query key="GetUnprocessedInvoices" value="SELECT        INVOICE_NUMBER FROM            FIN.LHF_INVOICE_WORKFLOW&#13;&#10;WHERE        (STATUS_FLAG = 'N')"/>
    <jdbc:transaction action="ALWAYS_BEGIN"/>
    <property key="receiveMessageInTransaction" value="true"/>
</jdbc:inbound-endpoint>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13711950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档