【问题标题】:Trouble using two different databases in Mule JDBC flow在 Mule JDBC 流中使用两个不同的数据库时遇到问题
【发布时间】:2014-05-23 13:56:06
【问题描述】:

我在 Mule 3.2.0 中有两个 JDBC 流,一个使用 MySQL 数据库,另一个使用 SQLServer 数据库。

<mule ...
    <spring:bean id="MySQL-jdbcDataSource"
        class="org.enhydra.jdbc.standard.StandardDataSource" destroy-method="shutdown">
        <spring:property name="driverName"
            value="com.mysql.jdbc.Driver" />
        <spring:property name="url"
            value="jdbc:mysql://host:port/schema" />
    </spring:bean>

    <jdbc:connector name="MySQL-jdbcConnector"
        dataSource-ref="MySQL-jdbcDataSource" pollingFrequency="${MySQL.db.poll}"
        transactionPerMessage="false">
        <jdbc:query key="read" value="${MySQL.db.jdbc_query}" />
    </jdbc:connector>

    <flow name="MySQL-flow">

        <jdbc:inbound-endpoint queryKey="read"
            connector-ref="MySQL-jdbcConnector">
            <jdbc:transaction action="ALWAYS_BEGIN"/>
            <property key="receiveMessageInTransaction" value="true"/>
        </jdbc:inbound-endpoint>

        <vm:outbound-endpoint path="path" connector-ref="first-level">
            <message-properties-transformer scope="outbound">
                <add-message-property key="identifier" value="MySQL"/>
            </message-properties-transformer>
            <vm:transaction action="NONE"/>
        </vm:outbound-endpoint>
    </flow>
</mule>

<mule ... 
    <spring:bean id="SQLServer-jdbcDataSource"
        class="org.enhydra.jdbc.standard.StandardDataSource" destroy-method="shutdown">
        <spring:property name="driverName"
            value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
        <spring:property name="url"
            value="jdbc:sqlserver://host:port;databaseName=schema" />
    </spring:bean>

    <jdbc:connector name="SQLServer-jdbcConnector"
        dataSource-ref="SQLServer-jdbcDataSource" pollingFrequency="${SQLServer.db.poll}"
    transactionPerMessage="false">
        <jdbc:query key="read" value="${SQLServer.db.jdbc_query}" />
    </jdbc:connector>

    <flow name="SQLServer-flow">
        <jdbc:inbound-endpoint queryKey="read"
        connector-ref="SQLServer-jdbcConnector">
            <jdbc:transaction action="ALWAYS_BEGIN"/>
            <property key="receiveMessageInTransaction" value="true"/>
        </jdbc:inbound-endpoint>

       <vm:outbound-endpoint path="${sv.vm.queue.name}" connector-ref="first-level-xform">
           <message-properties-transformer scope="outbound">
                <add-message-property key="${sv.vm.msg.identifier}" value="SQLServer"/>
           </message-properties-transformer>
           <vm:transaction action="NONE"/>
       </vm:outbound-endpoint>
    </flow>
</mule>

当我在 mule-deploy.properties 中部署这些 floes 中的任何一个时,它运行正常。但是当我同时部署这两个流时,它们都不起作用。我没有收到任何错误或异常,但似乎这些流程都没有运行。

有什么想法可能是错的吗?可能与 JDBC 事务有关?

【问题讨论】:

    标签: mysql sql-server jdbc mule


    【解决方案1】:

    如果您在同一个应用程序中有 2 个不同的流程.. 然后删除:-

    <spring:bean id="SQLServer-jdbcDataSource"
            class="org.enhydra.jdbc.standard.StandardDataSource" destroy-method="shutdown">
            <spring:property name="driverName"
                value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
            <spring:property name="url"
                value="jdbc:sqlserver://host:port;databaseName=schema" />
        </spring:bean>
    
        <jdbc:connector name="SQLServer-jdbcConnector"
            dataSource-ref="SQLServer-jdbcDataSource" pollingFrequency="${SQLServer.db.poll}"
        transactionPerMessage="false">
            <jdbc:query key="read" value="${SQLServer.db.jdbc_query}" />
        </jdbc:connector>
    

    来自任何流程...由于它被声明为全局...它可以从应用程序中的任何流程中使用..我的意思是..只需从其中一个中删除上面的代码行流程...因为您已经在两个流程中声明了我猜它是重复的,不需要放置在每个流程中...是的,只需提及参考 connector-ref="SQLServer-jdbcConnector" 在骡子流中...例如:-

    <jdbc:inbound-endpoint queryKey="read"
            connector-ref="SQLServer-jdbcConnector"> 
    

    【讨论】:

    • 我注意到的另一件事......你已经写了 和其他流程一样您提到了数据库名称 Schema ...您在第一个流程中错过了“ databaseName=”跨度>
    • 我有两个数据源引用的原因是因为我需要使用两个不同的数据库,并且它们不是重复的。另外,我没有错过第一个流程中的“databaseName”,这只是 MySQL 和 SQLServer 连接字符串之间的区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多