【问题标题】:JDBC TransactionsJDBC 事务
【发布时间】:2014-09-30 18:47:37
【问题描述】:

我有一个流程,我需要从对 Web 服务的调用一次写入 3 个表。这将是一种单向服务。因此,入站是 Web 服务,出站是带有 3 个插入的 JDBC。

这些表是父表和 2 个子表,它们需要按该顺序编写。我是否需要使用同步流以避免多个线程以及我应该使用什么事务?我猜它很简单,因为所有表都在同一个数据库中。下面的定义会起作用吗?

<flow name="xxx" doc:name="xxx" processingStrategy="synchronous">
  <http:inbound-endpoint exchange-pattern="one-way" host="localhost" port="3366" doc:name="HTTP" />
  <transactional action="ALWAYS_BEGIN">
    <jdbc:outbound-endpoint queryKey="insert" queryTimeout="-1" connector-ref="dbConnector" doc:name="Insert 1">
      <jdbc:transaction action="ALWAYS_JOIN" />
      <jdbc:query key="insert" value="insert into Parent values (#[payload], 'Test 1')" /></jdbc:outbound-endpoint>
    <jdbc:outbound-endpoint queryKey="insert2" queryTimeout="-1" connector-ref="dbConnector" doc:name="Insert 2">
      <jdbc:transaction action="ALWAYS_JOIN" />
      <jdbc:query key="insert2" value="insert into ChildA values (#[payload + 1], 'Test 2')" /></jdbc:outbound-endpoint>
    <jdbc:outbound-endpoint queryKey="insert3" queryTimeout="-1" connector-ref="dbConnector" doc:name="Insert 2">
      <jdbc:transaction action="ALWAYS_JOIN" />
      <jdbc:query key="insert3" value="insert into ChildB values (#[payload + 1], 'Test 2')" /></jdbc:outbound-endpoint>
  </transactional>
</flow>

【问题讨论】:

    标签: web-services jdbc transactions mule


    【解决方案1】:
    1. 参与事务的所有端点本质上都是同步的。
    2. 是的,如果标准事务都使用相同的connector,则它们是可以的。

    你可以使用:

        <transactional>
           <jdbc:outbound-endpoint queryKey="insert" queryTimeout="-1" connector-ref="dbConnector" doc:name="Insert 1">
                <jdbc:query key="insert" value="insert into Parent values (#[payload], 'Test 1')" />
           </jdbc:outbound-endpoint>
           <jdbc:outbound-endpoint queryKey="insert2" queryTimeout="-1" connector-ref="dbConnector" doc:name="Insert 2">
                <jdbc:query key="insert2" value="insert into ChildA values (#[payload + 1], 'Test 2')" />
           </jdbc:outbound-endpoint>
           <jdbc:outbound-endpoint queryKey="insert3" queryTimeout="-1" connector-ref="dbConnector" doc:name="Insert 2">
               <jdbc:query key="insert3" value="insert into ChildB values (#[payload + 1], 'Test 2')" />
           </jdbc:outbound-endpoint>
        </transactional>
    

    Mule 将找到第一个端点并为其启动事务,其他端点应加入

    【讨论】:

    • 谢谢瑞恩这也有助于插入顺序在这里插入父母必须先发生在孩子之前。
    • 是的,因为它们将是同步的,它们将按照定义的顺序运行。
    猜你喜欢
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2021-01-15
    • 1970-01-01
    相关资源
    最近更新 更多