gpt4 book ai didi

java - 如何为两个不同的 session 配置两个hibernate transactionManager

转载 作者:行者123 更新时间:2023-12-01 12:50:15 27 4
gpt4 key购买 nike

我有一个处理两个不同数据库实例的项目。对数据库的每次访问都是事务性的,但数据库 1 上的事务不需要链接到数据库 2 上的事务。

我正在使用 Hibernate 和 spring-tx 4.0.3 Release、spring Ioc4 和 hibernate4。

我在 DAO 服务中使用 @Transactional 注释。

因此,我配置了两个数据源 bean、两个 sessionFactory bean 和两个 HibernateTransactionManager bean。

但是这样做时,我得到了一个UniqueBeanException,因为TransactionAspectSupport.defineTransactionManager尝试仅查找一个实现PlatformTransactionManager接口(interface)的类的实例。

我已经看到我可以让我的java配置类实现TransactionManagementConfigurer,这样我就可以具体告诉要使用哪个事务管理器bean,并且我希望实现一个ProxyTransactionManager 谁可以根据当前需要进行的调用委托(delegate)给每个适当的事务管理器。

问题是实现这样的ProxyPlatformTransactionManager方法,我如何知道正在访问哪个数据库,或者正在访问哪个SessionFactory?否则我不知道要使用哪个 PlatformTransactionManager

有人遇到过此类问题吗?

谢谢

梅尔

最佳答案

在您的应用程序上下文中,您需要定义 2 个 transactionalManager,如下所示

<bean id="txMngr1" class="org.springframework.orm.hibernate5.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory1">
<qualifier value="txMngr1"/>
</bean>
<bean id="txMngr2" class="org.springframework.orm.hibernate5.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory2">
<qualifier value="txMngr2"/>
</bean>

然后将事务限定符与您的 DAO/服务一起使用。

@Transactional("txMngr2")

仅供引用:您也可以使用限定符从代码中访问多个 sessionFactories

@Autowired
@Qualifier(value="sessionFactory2")
private SessionFactory sessionFactory;

关于java - 如何为两个不同的 session 配置两个hibernate transactionManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24277001/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com