【问题标题】:With Spring transaction manager configured, when will the db connection established?配置 Spring 事务管理器后,何时建立数据库连接?
【发布时间】:2012-12-04 09:00:30
【问题描述】:

假设在名为TaskService 的类中有一个方法getAssignedTasks,该方法实际上从dao1.getInfo()dao2.getMoreInfo() 这两个数据源检索信息。问题是实际建立数据库连接的时间是什么时候?

我假设调用dao1.getInfo() 时已建立与datasource1 的连接,此时(dao2.getMoreInfo() 尚未调用)未建立与datasource2 的连接。我对吗?立即调用getAssignedTasks 方法时是否都会建立连接?

弹簧配置如下所示

<tx:advice id="txAdvice" transaction-manager="txManager">
    <tx:attributes>
        <tx:method name="get*" read-only="true" />

【问题讨论】:

    标签: database spring transactions connection


    【解决方案1】:

    我不知道这是否是规范定义的行为(如果不是 - 这可能在不同的 JTA 实现中有所不同),但是对于 Artomikos jdbc JTA 实现,似乎只有在需要时才进行连接,并且在开始时交易。

    这似乎是合乎逻辑的,因为在某些方法中,连接形式的第二个(或第三个,或)DataSource 可能不会被使用,从池中取出它只是无用的开销。

    我写了一个小测试来调查这个问题,可以在github 上找到。您可以通过它进行调试以进行自己的调查。

    【讨论】:

      猜你喜欢
      • 2017-07-30
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 2018-05-15
      • 2014-02-22
      • 2015-04-24
      • 2011-07-05
      • 2016-08-25
      相关资源
      最近更新 更多