我的評論
re: SpringSide 3 中的多數據源配置的問題[未登錄] hot 2011-12-09 17:24
如果調換兩個事務管理器在容器中的定義順序,如
<tx:annotation-driven transaction-manager="transactionManagerY" />
<tx:annotation-driven transaction-manager="transactionManagerX" />
得到的結果
methodX()事務生效測試結果 @Transactional
("transactionManagerX")
@Transactional
("transactionManagerY")
@Transactional
("transactionManagerZ")
transactionManagerZ為未定義過的 @Transactional
TestEntityServiceImpl(實際使用datasourceX) Y N N N
AnotherTestEntityServiceImpl (實際使用datasourceY) N Y Y Y
分析結果(其實源碼就可以反應出):容器指定一個默認的事務管理器
1.當在@Transactional("xxx")中正確指定了需要使用的事務管理器時,事務控制正常。
2.如果@Transactional指定了未定義過的事務管理器,spring以缺省默認的事務管理器來處理。(如果程序正好使用的是缺省事務管理器同一個數據源,事務控制將生效)。
3.如果@Transactional不指定事務管理器,使用缺省。
4.如果@Transactional指定了不匹配的事務管理器(實際用到的數據源和指定的事務管理器控制的數據源不一致),事務控制將失效.
<tx:annotation-driven transaction-manager="transactionManagerY" />
<tx:annotation-driven transaction-manager="transactionManagerX" />
得到的結果
methodX()事務生效測試結果 @Transactional
("transactionManagerX")
@Transactional
("transactionManagerY")
@Transactional
("transactionManagerZ")
transactionManagerZ為未定義過的 @Transactional
TestEntityServiceImpl(實際使用datasourceX) Y N N N
AnotherTestEntityServiceImpl (實際使用datasourceY) N Y Y Y
分析結果(其實源碼就可以反應出):容器指定一個默認的事務管理器
1.當在@Transactional("xxx")中正確指定了需要使用的事務管理器時,事務控制正常。
2.如果@Transactional指定了未定義過的事務管理器,spring以缺省默認的事務管理器來處理。(如果程序正好使用的是缺省事務管理器同一個數據源,事務控制將生效)。
3.如果@Transactional不指定事務管理器,使用缺省。
4.如果@Transactional指定了不匹配的事務管理器(實際用到的數據源和指定的事務管理器控制的數據源不一致),事務控制將失效.
re: SpringSide 3 中的多數據源配置的問題[未登錄] hot 2011-12-09 17:22
但是好像spring3.0(具體版本沒弄清)之前的Transactional標注不支持區分使用哪個事務管理器。3.0之后的版本Transactional增加了個string類型的value屬性來特殊指定加以區分。