基于spring和ibatis的多数据源切换方案

基本介绍

在仅使用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”的结果,本质相似于操做系统中的“生产者消费者”问题。所以当多用户访问时,多数据源可能会致使系统性能降低的后果。
相关文章
相关标签/搜索