- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
起因:在当前我手上的一个项目中需要多个数据源,并且来自于不同类型的数据库... 因为很多历史原因.这个项目的住数据源是MySQL,整个系统的CURD都是操作的这个数据库.但是还有另外两个用于数据采集的数据库: MSSQL,ACCESS.还好只是用于数据采集,在事务上可以不要跨数据库了,这一点节省了好多的工作量.环境:我搭建的测试环境是 spring2.5.6+hibernate3.2思路:动态切换数据源确切的来说是在同一类型数据库的情况下的。意思就是说 , 在系统中的使用的数据库分布在多台数据库服务器或者在同台服务器上的多个数据库. 在运行时期间根据某种标识符来动态的选择当前操作的数据库. 1.数据源是相同类型的数据库: 一个SessionFactory+动态数据源+一个事务管理器 2.数据源是不同类型的数据库: 根据类型配置多套SessionFactory模拟:两个mysql数据源+一个Access数据源实现:1.切换数据源需要标识符,标识符是Object类型package lhp.example.context;public enum DBType { dataSource1, dataSource2;}2.然后创建一个用于切换数据源(设置或者获得上下文)的工具类复制代码package lhp.example.context;public class ContextHolder {private static final ThreadLocalObject holder = new ThreadLocalObject();public static void setDbType(DBType dbType) {holder.set(dbType); }public static DBType getDbType() {return (DBType) holder.get(); }public static void clearDbType() {holder.remove(); }}复制代码3.创建动态数据源类,继承org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource这个类.复制代码package lhp.example.context;import java.util.logging.Logger;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extends AbstractRoutingDataSource {public static final Logger logger = Logger.getLogger(DynamicDataSource.class.toString()); @Overrideprotected Object determineCurrentLookupKey() { DBType key = ContextHolder.getDbType();//获得当前数据源标识符 //(当前数据源 : + key);return key; }}复制代码4.然后配置多个数据源复制代码!--数据源1 : mysql -- bean id=dataSource1 class=com.mchange.v2.c3p0.ComboPooledDataSource property name=driverClass value=com.mysql.jdbc.Driver/ property name=jdbcUrl value=jdbc:mysql://:3306/dec/ property name=user value=root/ property name=password value=/ /bean!--数据源2 : mysql -- bean id=dataSource2 class=com.mchange.v2.c3p0.ComboPooledDataSource property name=driverClass value=com.mysql.jdbc.Driver/ property name=jdbcUrl value=jdbc:mysql://:3306/lms/ property name=user value=root/ prop
文档评论(0)