当前位置: 首页 > 知识库问答 >
问题:

带有两个事务管理器的Spring事务注释

公西英叡
2023-03-14

我正在使用Spring(3.1.4版本)和HibernateTemplate(3.6.7.Final)以及Spring数据JPA(1.3.0版本)。我在配置文件中定义了两个事务管理器,一个用于Hibernate,另一个用于Spring数据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文档链接-10.5.6.2多个事务管理器,带有@Transactional)

我在配置文件中定义了注释驱动的事务,默认情况下,该文件选择Hibernate的事务模板

<tx:annotation-driven />

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

@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个答案

太叔栋
2023-03-14

尝试显式命名事务管理器。除了默认的“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>
 类似资料:
  • 我正在使用Spring的事务支持和JPA(Hibernate)来持久化我的实体。一切正常,但我在处理一个请求中的部分更新时陷入困境: 对于每个用户(HTTP)请求,我必须将一个日志条目写入数据库表,即使“主”业务实体的更新失败(例如,由于验证错误)。因此,我的第一个/主要事务get被回滚,但第二个(写日志)应该提交。这似乎可以使用正确的传播级别来写入日志条目: 然而,我的问题是,我在第二个事务中注

  • 主要内容:1.事务环境搭建,2.注意1.事务环境搭建 UserDao.java UserService.java 在Service后面加上了一个异常 TxConfig.java配置类 test 本来的数据 数据达到回滚的效果。 2.注意 1.在service方法上添加@Transactional注解 2.在配置类上加入@EnableTransactionManagement注解 开启事务管理器功能 3.在配置类中加入Platform

  • 9.2.1 概述 Spring框架支持事务管理的核心是事务管理器抽象,对于不同的数据访问框架(如Hibernate)通过实现策略接口PlatformTransactionManager,从而能支持各种数据访问框架的事务管理,PlatformTransactionManager接口定义如下: public interface PlatformTransactionManager { T

  • 问题内容: 我刚刚开始使用spring和hibernate进行项目。我的DAO图层类扩展了HibernateDaoSupport。我们没有使用注释。之前,我们使用了struts,因此我们使用了Session类提供的getTransaction,commit,rollback ..方法。我的要求非常简单,对于所有DAO类,如果有异常,则回滚,否则提交。请提出介绍spring交易管理的最简单方法。 问

  • 我试图用不同的事务管理器嵌套事务,其中如果嵌套的事务失败,外部主事务也需要回滚 我的spring配置文件有 但是,当失败时,中的事务不会回滚。如何使回滚工作?

  • 我正在探索Ignite事务性缓存。我已经有了一段代码,它对JDBC使用Spring事务管理。我想使用Spring缓存抽象在代码中集成ignite事务性缓存。 我遇到了SpringTransactionManager(由Ignite提供),但我无法找到正确的使用方法。本质上,我想做一些类似的事情: 当事务提交时,数据库和缓存应该一起提交。为此,Ignite文档提到了使用SpringTransacti