【问题标题】:Spring transaction annotation with two transaction managers带有两个事务管理器的 Spring 事务注释
【发布时间】:2014-01-15 12:59:40
【问题描述】:

我正在使用带有 HibernateTemplate(3.6.7.Final) 和 Spring Data JPA(1.3.0.RELEASE) 的 Spring(3.1.4 版本)。 我在我的配置文件中定义了两个事务管理器,一个用于 Hibernate,另一个用于 Spring Data JPA。两个事务管理器都使用不同的数据源。

<bean id="jpaTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<bean id="transactionTemplate"      class="org.springframework.transaction.support.TransactionTemplate">
    <property name="transactionManager" ref="transactionManager" />
</bean>

我希望我的代码中的一些方法使用 Hibernate 的事务管理器和一些方法来使用 Spring data JPA 的事务管理器。 (Spring Doc link - 10.5.6.2 使用 @Transactional 的多个事务管理器

我在我的配置文件中定义了注解驱动的事务,默认是选择Hibernate的事务模板

<tx:annotation-driven />

对于使用 Spring Data JPA 的事务管理器运行方法,我在我的方法定义中提到了事务管理器的名称,即 @Transactional(value = "jpaTransactionManager") ,但是在将记录插入 DB 之后,线程被挂起,进一步的代码是未调用。

@Transactional(value = "jpaTransactionManager")
public void transactionMethod()
{
Object obj = createObj();
repository.save(obj); //data is inserted in DB here but after that thread is getting hanged here and below business logic is not called

// Some business logic
}

使用 Hibernate 的事务管理器的方法工作正常,但使用 Spring Data JPA 的事务管理器的方法不工作。

我尝试了以下事情但没有成功

  • 对两个事务管理器使用两个。
  • 注释 @Transactional(value = "jpaTransactionManager") 都在 类级别和方法级别。

非常感谢您对上述问题的任何帮助。

【问题讨论】:

    标签: spring hibernate transactions spring-data-jpa


    【解决方案1】:

    尝试明确命名事务管理器。对两者都使用默认的“transactionManager”之外的东西,并更新所有 bean 引用以明确说明他们需要哪个 transactionManager。另外,我认为您需要两个 "" 声明。

    类似这样的:

    <tx:annotation-driven transaction-manager="hibernateTransactionManager"/>
    <tx:annotation-driven transaction-manager="jpaTransactionManager"/>
    
    <bean id="transactionTemplate"      class="org.springframework.transaction.support.TransactionTemplate">
        <property name="transactionManager" ref="hibernateTransactionManager" />
    </bean>
    

    【讨论】:

      猜你喜欢
      • 2011-12-24
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 2023-02-16
      • 2016-01-29
      • 2019-01-09
      • 1970-01-01
      • 2014-02-14
      相关资源
      最近更新 更多