2014-12-01 707 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