博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java项目多数据源配置 (转)
阅读量:6913 次
发布时间:2019-06-27

本文共 2976 字,大约阅读时间需要 9 分钟。

由于种种原因,有的时候可能要连接别人的数据库,或者不同的数据库没法自动转换,重构起来数据量又太大了,我们不得不在一个项目中连接多个数据源。从网上找了各种资料,只有这位大神给出的解决方案一下子就成功了。http://www.cnblogs.com/hoojo/p/dynamic_switch_sessionfactory_muliteSessionFactory.html,但是诚如博客最后所指出的,把不同数据库的操作放在一个方法,就会出现事务的问题,这时候需要手动进行事务管理。虽然我也手动操作了数据库,但是在每次服务器重新启动或者用户第一次访问时会有session关闭的问题。会报如下错误:no value for key [org.hibernate.impl.sessionFactory@XXX] bound to thread[XXX],这个错误就是session意外关闭的意思。我一开始没能找到合适的解决方案,只好遇到这个问题就让程序再原样执行一遍,这显然是治标不治本。

  以我浅见,似乎是每一个request到达服务器,事务管理就给它一个session查询数据库,如果中途切换数据库,session就会意外关闭。而添加了分布式事务管理,同一个request会再加一个查询数据库的session,供查询另一个数据库,这样可以达到灵活切换数据库的效果。

      后来我换了一种问法,提出“session意外关闭怎么办?”,并找了一些关于事务管理的资料,了解到JTA技术可以解决此问题。JTA,即Java Transaction API,用于解决应用程序分布式事务处理。它可以解决在两个或多个网络计算机资源上访问并且更新数据,在此用到其实还有点大材小用。

      下面是我的配置文件。这是借助了atomikos实现的分布式事务管理,要引入相关jar包。

      1、多数据源连接池配置

  

   2、配置两个SessionFactory对象,都是org.springframework.orm.hibernate3.LocalSessionFactoryBean类的对象。

org.hibernate.dialect.MySQL5Dialect
after_transaction
true
true
none
classpath:edu/cau/warning/entity/*.hbm.xml
classpath:edu/cau/base/entity/*.hbm.xml
6 17
21
org.hibernate.dialect.SQLServer2008Dialect
true
true
none
35
classpath:edu/cau/base/entity/*.hbm.xml
classpath:edu/cau/diagnosis/entity/*.hbm.xml

  3、SessionFactory配置,DynamicSessionFactoryImpl类是个什么鬼请参考文章开头大神的文章。

 4、配置事务管理。

1 
2
UserTransactionManager
3
4
true
5
6
7
8
9
13
14
15
16

       5、配置事务通知等。

转载于:https://www.cnblogs.com/sandea/p/7862372.html

你可能感兴趣的文章
JS冒泡事件 与 事件捕获
查看>>
NetSetMan IP地址切换工具
查看>>
Lind.DDD敏捷领域驱动框架~Lind.DDD各层介绍
查看>>
单片机不同晶振怎么计算延迟时间?
查看>>
第 15 章 Div+CSS页面设计
查看>>
龙珠激斗大冒险掷筛子算法
查看>>
第 46 章 Regular expression (正则表达式)
查看>>
入坑IT都快十年了
查看>>
【spring Boot】spring boot获取资源文件的三种方式【两种情况下】
查看>>
(转) 机器学习很有趣Part6:怎样使用深度学习进行语音识别
查看>>
ASP.NET遇到HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容
查看>>
Android Gradle 自定义Task 详解
查看>>
数据结构之树、森林和二叉树的转换
查看>>
svn服务器配置以及自动同步到web服务器
查看>>
【CSS进阶】伪元素的妙用2 - 多列均匀布局及title属性效果
查看>>
【VS2013】设定Nuget代理
查看>>
php xls 导出乱码解决方案
查看>>
SwipeBackActivity 的使用
查看>>
逻辑卷、物理卷、卷组 的关系
查看>>
tkinter 弹出窗口 传值回到 主窗口
查看>>