您的位置:首页 > 编程语言 > Java开发

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");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: