【问题标题】:Which is the default transaction manager the @Transactional uses?@Transactional 使用的默认事务管理器是哪个?
【发布时间】:2014-12-01 23:04:43
【问题描述】:

我们已经配置了多个事务管理器:

<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”。我错过了什么吗?

【问题讨论】:

  • 您还没有回答自己的问题吗?如果需要,您可以将 @Transactional 注释的 value 属性设置为您需要的特定 tx manager 的名称。
  • 我知道我们可以指定值,但我的问题是如果我们不指定值它是如何工作的。似乎在使用第一个 tx 管理器,尽管我找不到哪本书/教程这样说。

标签: spring transactions


【解决方案1】:

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

那里的行为可能未定义,但最有可能使用上下文中最先出现的&lt;tx:annotation-driven&gt;

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

【讨论】:

  • 是的。这就是我想知道的。我无法在任何地方找到支持我猜测的证据(如果我们没有在注释中指定值,请使用第一个配置的 tx mgr。
猜你喜欢
  • 2019-11-02
  • 1970-01-01
  • 1970-01-01
  • 2023-02-16
  • 2011-03-20
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多