哪个是@Transactional使用的默认事务管理器?

时间:2014-12-01 23:04:44

标签: spring transactions

我们已配置多个交易管理器:

<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注释中指定的事务管理器的名称。我想知道将使用哪个事务管理器?代码正在运行,看起来它使用了第一个 - &#34; transactionManager1&#34;默认情况下。我想念一下吗?

1 个答案:

答案 0 :(得分:0)

  

我想知道将使用哪个事务管理器?

那里的行为可能是未定义的,但它最有可能使用上下文中首先出现的<tx:annotation-driven>

没有理由你需要这样做。如果您需要对使用哪个tx管理器进行细粒度控制,那么您需要使用TransactionTemplate之类的方式以编程方式进行控制。 @Transactional注释是一种方便,但不如直接使用底层API那么灵活。