Spring动态创建,加载,使用多数据源
2015-11-02 23:45
295 查看
摘要 项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此。多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源。
项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此。多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源。例如在一个spring和hibernate的框架的项目中,我们在spring配置中往往是配置一个dataSource来连接数据库,然后绑定给sessionFactory,在dao层代码中再指定sessionFactory来进行数据库操作。
正如上图所示,每一块都是指定绑死的,如果是多个数据源,也只能是下图中那种方式。
可看出在Dao层代码中写死了两个SessionFactory,这样日后如果再多一个数据源,还要改代码添加一个SessionFactory,显然这并不符合开闭原则。
那么正确的做法应该是
先说一下我的思路:
首先做一个创建数据源配置文件的类,专门用于创建数据源xml配置,叫ConfigFileCreator.java
其次,编写一个动态加载刚才创建的配置文件的类,叫 DynamicLoadBean.java。至此,创建的数据源到内存中已经完成。
第三,重点编写这个DynamicDataSource.java,该类主要是用来实现动态切换数据源,并通知容器。在这一块我选择了修改,AbstractRoutingDataSource.java,编写一个支持添加数据源对象的方法public void addDataSource(Object key,Object dataSource)
第四,写例子来测试
实现过程如下:
1.bean.xml配置文件
[html] view plain copy
?
2.AbstractRoutingDataSource.class 修改的部分
[java] view plain copy
?
3.DynamicDataSource.class 这个类中有一个地方需要注意,当我们添加数据,切换了数据源,要通知当前spring容器,需要调用父类的super.afterPropertiesSet();方法
[java] view plain copy
?
4.动态加载数据源配置文件DynamicLoadBean.class
[java] view plain copy
?
5.DataSourceContextHolder.class
[java] view plain copy
?
5.测试代码
[java] view plain copy
?
切换数据源就一句话搞定 DataSourceContextHolder.setDataSourceType("qqq");
项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此。多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源。例如在一个spring和hibernate的框架的项目中,我们在spring配置中往往是配置一个dataSource来连接数据库,然后绑定给sessionFactory,在dao层代码中再指定sessionFactory来进行数据库操作。
正如上图所示,每一块都是指定绑死的,如果是多个数据源,也只能是下图中那种方式。
可看出在Dao层代码中写死了两个SessionFactory,这样日后如果再多一个数据源,还要改代码添加一个SessionFactory,显然这并不符合开闭原则。
那么正确的做法应该是
先说一下我的思路:
首先做一个创建数据源配置文件的类,专门用于创建数据源xml配置,叫ConfigFileCreator.java
其次,编写一个动态加载刚才创建的配置文件的类,叫 DynamicLoadBean.java。至此,创建的数据源到内存中已经完成。
第三,重点编写这个DynamicDataSource.java,该类主要是用来实现动态切换数据源,并通知容器。在这一块我选择了修改,AbstractRoutingDataSource.java,编写一个支持添加数据源对象的方法public void addDataSource(Object key,Object dataSource)
第四,写例子来测试
实现过程如下:
1.bean.xml配置文件
[html] view plain copy
?
[java] view plain copy
?
[java] view plain copy
?
[java] view plain copy
?
[java] view plain copy
?
[java] view plain copy
?
相关文章推荐
- Java课堂作业05
- Java记录 -56- 详解HashSet不含重复元素的实现
- java cookie
- Java泛型
- spring mvc分页-----转载
- Java 多线程中run() 与 start() 的不同
- Java记录 -55- Set下的HashSet
- java动手动脑
- fastJson在java后台转换json格式数据探究
- Java并发编程:Lock
- Caused by: java.lang.UnsupportedOperationException
- Caused by: java.lang.UnsupportedOperationException
- [转载] 应用于负载均衡的一致性哈希及java实现
- java实现极简的LRU算法
- Jeecms去除Eclipse开发环境中的项目名
- MyEclipse中JAR System library 怎么更改
- Maven学习 (三) 使用m2eclipse创建web项目
- springmvc学习总结之配置篇
- Maven学习 (二) Eclipse 上安装 Maven3插件
- MyBatis入门(六)---mybatis与spring的整合