2014-12-01 25 views
1

我們已經配置了多個事務管理器:@Transactional使用哪個默認事務管理器?

<tx:annotation-driven transaction-manager="transactionManager1" /> 
<tx:annotation-driven transaction-manager="transactionManager2" /> 
<tx:annotation-driven transaction-manager="transactionManager3" /> 

<bean id="transactionManage1" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory1" /> 
</bean> 
<bean id="transactionManager2" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory2" /> 
</bean> 
<bean id="transactionManage3" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory3" /> 
</bean> 

不過,我沒有看到在服務類中的@Transactional註釋指定的事務管理器的名稱。我想知道哪個交易管理器將被使用?代碼正在工作,它看起來像使用了第一個 - 「transactionManager1」默認情況下。我想念什麼?

+0

你沒有回答你自己的問題嗎?如果需要,可以將_ @ Transactional_註釋的_value_屬性設置爲所需的特定tx管理器的名稱。 – Angad 2014-12-02 03:19:31

+0

我知道我們可以指定值,但是我的問題是如果我們沒有指定值,它是如何工作的。它似乎使用第一個TX管理器,雖然我找不到這樣的書/教程。 – user3552864 2014-12-03 04:19:35

回答

0

我想知道將使用哪個事務管理器?

這裏的行爲可能是未定義的,但它最有可能使用哪個<tx:annotation-driven>在上下文中首先出現。

你沒有理由需要這樣做。如果您需要對使用哪個tx管理器進行細化控制,那麼您需要使用類似TransactionTemplate的程序來執行此操作。 @Transactional註釋很方便,但不如直接使用底層API那麼靈活。

+0

是的。這是我想知道的。我無法在任何地方找到證據來支持我的猜測(如果我們沒有在註釋中指定值,請使用第一個配置的tx mgr。 – user3552864 2014-12-03 04:23:34