spring 不同用户加载不同数据源?配置实现方案。。

using 发布于 2015/02/11 15:03
阅读 1K+
收藏 1

前期描述:目前项目使用的sring mvc 数据源是 druid。
数据源直接配置在applicationContext-database.xml中的。。


需求描述:
需要在项目中配置一个数据源,指向一个公共的mysql(jdbc:mysql://192.168.1.10/dbmanger)数据库。
在此mysql数据库中有一张表为 user_database_config表
表中现有数据分别为:
a用户,jdbc:mysql://192.168.1.100/db1
b用户,jdbc:mysql://192.168.1.100/db2
c用户,jdbc:mysql://192.168.1.100/db3

java项目命为:pro_test

现在想要实现的结果是:
a用户访问pro_test项目的时候,pro_test项目数据链接指向db1的数据库
b用户访问pro_test项目的时候,pro_test项目数据链接指向db2的数据库
c用户也同上
........


目前如果用普通的jdbc 手动链接 是可以实现以上的需求的。。。

但是在spring中,请问怎么配置能达到如上的效果?

@红薯

加载中
0
MuOu
MuOu

动态切换数据源,获取用户信息,判断用户 然后设定不同数据源。

if (session.getAttribute("userFlag") == 1)

dataSource = Constants.DATA_SOURCE_DAME.NAME_1;

if (session.getAttribute("userFlag") == 2)

dataSource = Constants.DATA_SOURCE_DAME.NAME_2;

DynamicDataSourceHolder.setDataSourceName(dataSource);

MuOu
MuOu
@using 不经常登录,才看到,还要吗
using
using
求完整的代码参考。。。谢谢。
0
敌羞吾去脱他衣
敌羞吾去脱他衣

将数据源部分的配置写成3份,系统启动时加载到缓存中(别视图做运行时的配置),这样你就有了3个sessionFactory,能实现3种不同的Dao接口。

把用户分类,针对这个分类写个UserDaoFactory,里面会有个getDao的接口。(当然1个通用的BaseDao是必须的,也要有3个DbBaseDao接口,以及对应的具体实现)

UserDaoFactory作为dao注入你的Service中,一定要带参数,这样才能找到具体的Dao。


using
using
数据源配置不能写死,,是动态增长的。。如果是固定的 到好解决。
0
敌羞吾去脱他衣
敌羞吾去脱他衣

这样一来,楼主只好去实现自定义的数据源和连接池了。

一般情况下,只推荐改sessionFactory及以上,只改Dao是最好的。

敌羞吾去脱他衣
敌羞吾去脱他衣
呵呵,个人能力有限,不过在osc上随意搜了一把,找到一篇好文送给楼主。 《spring中动态加载bean的简单实现》 http://zhyi-12.iteye.com/blog/953295
using
using
目前已经有一个解决方案,,可以实现多数据源。 但现在有个问题,在项目启动过程中,在增加数据源,怎么刷新spring的数据源 还是个问题。。
0
tonghuazhong
tonghuazhong
你的 意思要不断刷新新加入的bean?如果是你可以refresh新载入的bean.看看classloader吧。
0
ctracerpplov
ctracerpplov
大神,我也有这个需求,求告知怎么解决的呢。
返回顶部
顶部