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条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?