首页 文章

Spring事务注释与两个事务管理器

提问于
浏览
2

我使用Spring(3.1.4版本)与HibernateTemplate(3.6.7.Final)和Spring Data JPA(1.3.0.RELEASE) . 我在配置文件中定义了两个事务管理器,一个用于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 's transaction manager and some methods to use Spring data JPA'的事务管理器 . (Spring Doc link - 10.5.6.2 Multiple Transaction Managers with @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") .

非常感谢上述问题的任何帮助 .

1 回答

  • 0

    尝试明确命名事务管理器 . 除了默认的“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>
    

相关问题