iteye_943 2012-09-20 17:42
浏览 249
已采纳

请问:如何动态切换数据源?

 

现在有一个需求是这样的:要求用户在访问系统(是一个JavaWeb项目)时,在登录的时候,可以选择要登入的数据库。

大概是这样:比如事先配置好数据库A,B,C(例如,开发库,测试库和生产库,数据不同但表结构一致)。当用户访问系统主页的时候,弹出窗口,让用户选择要连接哪个数据库。

当然不同用户之间的选择是不能相互影响的。(不能用户A连接了数据库A,又来了用户B连接了数据库B,之后用户A发现数据库变成B了)

请问,如何实现?

项目使用的技术:Spring3 + Hibernate3 + SpringMVC

 

一点点思路:利用Spring的AbstractRoutingDataSource来动态决定要连接的数据源,使用ThreadLocal将选择的数据源放入当前线程中。但实验并未成功,还是会相互影响。

求解啊~~~~

  • 写回答

2条回答 默认 最新

  • jinnianshilongnian 2012-09-20 17:54
    关注

    1、用户选择库后 将数据库key 如放入 session
    2、过滤器 拦截用户请求
    2.1 如果session中没有key 则将用户重定向到 选择库界面 选中
    2.2 否则绑定key到ThreadLocal变量
    2.3 请求结束 删除ThreadLocal
    3、AbstractRoutingDataSource 根据ThreadLocal选择库

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法