栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Hibernate使用多个数据库

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hibernate使用多个数据库

我假定你有一组应使用的DAO的

dataSource1
和适当的
sessionFactory1
,而其他人应该使用不同的
dataSouce2
sessionFactory2
基于
dataSource2
。当然,你需要声明第二个
dataSource
和其他
bean
:只需复制你已有的配置并更改bean id,以免它们冲突。除
<tx:annotation-driven/>
以下内容外,所有内容均应镜像:

<bean id="dataSource1" >    <!-- ... --></bean><bean id="sessionFactory1" >    <property name="dataSource" ref="dataSource1"/>    <!-- ... --></bean><bean id="transactionManager1" >    <property name="sessionFactory" ref="sessionFactory1"/>    <!-- ... --></bean><bean id="dataSource2" >    <!-- ... --></bean><bean id="sessionFactory2" >    <property name="dataSource" ref="dataSource2"/>    <!-- ... --></bean><bean id="transactionManager2" >    <property name="sessionFactory" ref="sessionFactory2"/>    <!-- ... --></bean><tx:annotation-driven transaction-manager="transactionManager1"/>

真正的问题来了:你现在有两个绑定到不同会话工厂的事务管理器,这些会话工厂又被路由到不同的数据源。但是

@Transactional
注释将始终仅使用一个事务管理器-
transactionManager
默认情况下命名的事务管理器(请注意,我明确指出
了transactionManager1
这一点。这意味着使用第二个数据源的DAO将参与在第一个数据源中启动的事务-这显然不是预期的。

有一些解决方法,例如在

@Transactional
批注中显式定义事务管理器名称(从未尝试过使用)或使用
TransactionTemplate
,但是如你所见,应该仔细考虑问题。

至于自动装配-如果你按名称自动装配,请为你的字段命名与会话工厂或数据源ID相同,它应该起作用-但实际上这是你的最小问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411272.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号