2012-12-17 84 views
3

假設在名爲TaskService的類中有一個方法getAssignedTasks,並且此方法實際上從兩個數據源​​和dao2.getMoreInfo()中檢索信息。問題是數據庫連接何時實際建立?配置Spring事務管理器,db連接何時建立?

我假設在調用​​並且此時(dao2.getMoreInfo()尚未調用)與數據源2的連接未建立時建立與數據源1的連接。我對嗎?當立即致電getAssignedTasks方法時,連接是否會建立?

Spring的配置是一樣的東西下面

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

回答

0

我不知道這是否規範中定義的行爲(如果不是 - 這可能是在不同的JTA實現不同),但與Artomikos JDBC JTA實現它似乎只有在需要時和事務開始時才進行連接。

這似乎是合乎邏輯的,因爲在某些方法中,第二個(或第三個或者)DataSource的連接形式可能不會被使用,並且從池中獲取它將只是無用的開銷。

我寫了一個小測試來調查這個可以在github上找到。您可以通過它進行調試以進行自己的調查。