3

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

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

弹簧配置如下

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

1 回答 1

0

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

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

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

于 2012-12-23T11:27:17.713 回答