博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】一次SpringMVC+ Mybatis 配置多数据源经历
阅读量:7110 次
发布时间:2019-06-28

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

需求

现在在维护的是学校的一款信息服务APP的后台,最近要开发一些新功能,其中一个就是加入学校电影院的在线购票。在线购票实际上已经有一套系统了,但是是外包给别人开发的,我们拿不到代码只能拿到数据库,并且也不一定能很好的兼容之前的代码,所以需要基于这个数据库来进行新的开发。

现在用的后台是SpringMVC+Mybatis+MySQL开发的,购票用的是SQL Server 2008(好古老的东西了),因为要用一套用户体系所以不可能再去单独为了这个功能弄一个系统出来,因此要在原项目中兼容这个数据库。

问题

如何在一个web项目中使用两个数据源,并且不同的接口可以按需选择数据库。

方案

最开始的做法

因为我们的项目用的是Mybatis作为ORM框架,在其配置文件中可以配置数据源信息,原始配置如下:

spring-mybatis.xml

然后我就天真的认为是不是再新建一个dataSource的bean、sqlSessionFactory、mapperScannerConfigurer和transactionManager,把数据库连接信息改一下,就可以同时使用两个数据库了。但是尝试之后发现第二个数据库的mapping文件根本没有被初始化进spring的context中,报了Invalid bound statement (not found)这个错,查了一下说是配置文件不对等原因造成的。后来发现实际上因为上面的配置文件中的sqlSessionFactory在spring中是单例的,因此按照我的想法第二个sqlSessionFactory根本就不会被实例化。所以此方法行不通!

改进做法

最后是在中找到了正确可行的解决方法:使用Spring提供的AbstractRoutingDataSource类来根据请求路由到不同的数据源。具体做法是

先设置两个不同的dataSource代表不同的数据源,再建一个总的dynamicDataSource,根据不同的请求去设置dynamicDataSource。代码如下:

配置文件spring-mybatis.xml

转载地址:http://xmlhl.baihongyu.com/

你可能感兴趣的文章
Win 10 NEON新界面命名Fluent Design System
查看>>
如何在Linux中删除超大的(100-200GB)文件
查看>>
《 产品设计思维:电商产品设计全攻略》一一第3章 电商梦的开始:首页设计...
查看>>
《C++语言入门经典》一2.7 语句
查看>>
欧盟将制定新物联网安全规定
查看>>
Win10 RS3高DPI截图对比:200%依旧清晰
查看>>
《MongoDB管理与开发精要》——2.4节停止数据库
查看>>
建立市民满意的智慧城市评估模型
查看>>
教授谈投资型FO 的CIO究竟需要哪些能力?
查看>>
如何优化数据表格设计
查看>>
CCAI | 今日头条实验室李磊:我们离会思考的机器人还有多远?
查看>>
Opera:被中国财团收购后不会堕落
查看>>
兵家必争大数据,争来争去是大数据时代的话语权
查看>>
中国医疗大数据“痛点” :孤岛怎么破
查看>>
亚信安全联合国家计算机病毒应急处理中心 发起病毒疫情调查
查看>>
当Gartner说OpenStack内外交困时,我的内心是不要不要的
查看>>
快易省智:数据中心UPS四大演进方向
查看>>
框架设计之菜鸟漫漫江湖路系列 二:自学求索
查看>>
非洲一国遭攻击断网 或是黑客组织在练手
查看>>
2020年,1000亿个智能终端驱动嵌入式闪存高速发展
查看>>