基于spring和ibatis的多数据源切换方案
2013-10-11 17:13
323 查看
基本介绍
在仅使用ibatis时,多数据源简直就是梦魇,每多一个数据源就需要多一份sql-map-config配置文件。采用spring的AbstractRoutingDataSource就可以简单的解决这个问题。
AbstractRoutingDataSource实现了javax.sql.DataSource接口,因此可以理解为一个虚拟的动态DataSource,在需要的时候根据上下文Context动态决定使用哪个数据源。
该方案的优势
首先,这个方案完全是在spring的框架下解决的,数据源依然配置在spring的配置文件中,sessionFactory依然去配置它的dataSource属性,它甚至都不知道dataSource的改变。唯一不同的是在真正的dataSource与sessionFactory之间增加了一个MultiDataSource。其次,实现简单,易于维护。这个方案虽然我说了这么多东西,其实都是分析,真正需要我们写的代码就只有MultiDataSource、SpObserver两个类。MultiDataSource类真正要写的只有getDataSource()和getDataSource(sp)两个方法,而SpObserver类更简单了。实现越简单,出错的可能就越小,维护性就越高。
最后,这个方案可以使单数据源与多数据源兼容。这个方案完全不影响BUS和DAO的编写。如果我们的项目在开始之初是单数据源的情况下开发,随着项目的进行,需要变更为多数据源,则只需要修改spring配置,并少量修改MVC层以便在请求中写入需要的数据源名,变更就完成了。如果我们的项目希望改回单数据源,则只需要简单修改配置文件。这样,为我们的项目将增加更多的弹性。
该方案的缺点
没有能够解决多用户访问单例“sessionFactory”时共享“dataSource”变量,导致产生争抢“dataSource”的结果,本质类似于操作系统中的“生产者消费者”问题。因此当多用户访问时,多数据源可能会导致系统性能下降的后果。相关文章推荐
- 基于spring和ibatis的多数据源切换方案
- 基于Struts2 Spring ibatis Oracle10g架构 多数据源动态切换实例
- 基于 Spring 和 iBATIS 的动态可更新多数据源持久层
- 基于 Spring 和 iBATIS 的动态可更新多数据源持久层
- SPRINGAOP实现基于注解的数据源动态切换(转)
- Spring基于aop多数据源切换
- Spring配置基于数据源的数据管理器适用于jdbc以及iBatis
- 基于Spring+Mybatis的多数据源动态切换
- 基于Spring+Mybatis的多数据源动态切换
- Spring-基于Spring的多数据源切换
- 利用spring+ibatiS技术,在spring中配置多个数据源,并实现动态切换。
- spring 基于注解动态切换数据源的实现
- 基于Mybatis+Spring+SpringAOP实现Mybatis多数据源切换
- spring+mybatis 多数据源切换,动态数据源增长,saas多租户模式方案
- 基于 Spring 和 iBATIS 的动态可更新多数据源持久层
- Spring中基于注解的动态切换数据源方法
- 利用spring+ibatiS技术,在spring中配置多个数据源,并实现动态切换。
- 基于Spring+Mybatis的多数据源动态切换
- 基于spring+mybatis+atomikos+jta实现分布式事务(2)-动态切换数据源
- Spring+Mybatis 切换多数据源