hibernate+spring 连接多个数据库,动态切换(多帐套)的实现

本文介绍了如何在hibernate+spring框架下实现连接并动态切换多个数据库,主要通过维护线程局部变量和session映射来跟踪用户所选的帐套,从而在每次请求时切换到对应的数据库。详细讲解了记录每个session对应帐套的方法以及切换数据库的配置和实现。
摘要由CSDN通过智能技术生成

在现实应用中,可能我们后台所有连接的数据库可能不止一个,有可能要求一套代码同时可以连接多个数据库,并且要求在多个数据库中动态切换,本人也遇到这样的需求,就把自己的解决方案分享一下,该方法值针对hibernate+spring框架。


说先来说一下,我的这个需求:


先来讲一下帐套的概念:

   按我的理解,帐套就是一个帐套就是一个数据库的映射。如后台有数据库a,b,c,那么我就建有一个映射

   帐套a ---数据库a

   帐套b---数据库b

   帐套c---数据库c

   用户看到的是帐套a,帐套b,帐套c,但是程序操作的数据库a,数据库b,数据库c,即当用户选择帐套a,程序对应的数据库就是数据库a,当用户选择帐套b,程序对应的数    据库就是b。

需求:

   用户再登陆时,用户可以选择要登录的帐套(帐套就是一个队数据库的映射),要同时允许多个用户在登陆不同的帐套,也就是说程序对应的数据库,一直在不停地变化着,因为每个用户选择的帐套不同,程序操作的数据库就不同。


解决思路:

  通过对需求分析,可以得到结论就是:每一个用户都操作着一个帐套,每一个帐套都对应着一个数据库,这里也可以说是一个对照表如:

  用户1--帐套a

  用户2--帐套b

根据帐套和数据库的映射,可以得到

 用户1--数据库a

 用户2--数据库b

因为我的是web应用,所以每一个用户就是一个会话(session),所以我用session的sessioinId作为用户的唯一标识。当用户在登陆系统时会被要求选择一个帐套,这个帐套会session绑在一起,作为一组键值对,存在放内存中,用户的每一次请求,都会根据sessionid获取到当前这个sessionId对应的帐套,进而获取到对应的数据库,然后将数据库切换为该sessionId 对应的数据。


原理都已经讲清楚,现在只需要实现2点,

 1.记录每一个session对应的帐套

 2.每一次请求切换对应的数据库

以下,讲一下如何实现这两点

  记录每一个session对应的帐套

  维护2个map,一个是当前线程map,另一个是sessionIdMap,在登陆时将用户信息和帐套信息写人

public class SpObserver {
/**

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值