最近做做了一个项目,项目有这种需求,要求在同一套程序中,根据用户动态切换数据库。
在网上找了一下,发现很少这样的资料,即使有也不符合我的想法,所以没采纳。于是我试了试自己的想法,发现可行,现在与大家分享一下,也许这中想法很笨拙,希望高人指点。
首先,我介绍一下项目的开发环境:gwt-ext、spring、hibernate。其实本次项目几乎已经完结,但只有一个数据库。因为需求的变更,要他其他几个表结构相同的数据库也运行在此系统中,于是需要用到数据库的动态切换。对于一个已经完结的系统来说,如果修改过多的话,那是一件非常麻烦的事,所有要尽量减少变动,即以最少的修改,实现数据库的动态切换。
如果项目中没有使用spring,要实现动态切换数据库将是一个很容易的事情,就是因为使用了spring,使得动态切换数据库有些难度。现在,我来谈谈我的想法:首先,为每个数据源配置独立的sessionFactory和事务管理器,要想在程序运行动态切换数据库,其实只要动态切换sessionFactory即可。那么怎样在用户发出资源请求的时候,决定使用哪个数据库呢,在这里,我们只要充分灵活应用spring的bean作用域就可以实现。好,现在我们来看看spring 的bean有哪些作用域:singleton,prototype,session,request等。spring默认的作用域是singleton,作用域为singleton的bean,将只被初始化一次,所以要动态切换数据库,bean的作用域一定不能使用singleton。但如果为了减少系统的开销,使用session作用域的话,你必须使用servlet2.4以上版本,在web.xml中不在使用contextListener而是使用requestContextListener。此外,你还要了解,bean的实例化顺序,哪些bean先实例化,哪些后实例化。打个比方:bean A 依赖 bean B ,那么当用户请求资源时,spring 先实例化 bean A所依赖的bean B,然后再实例化 bean A。在web 应用程序中,我们一般使用三层结构:即 展示层、业务逻辑层和数据持久层。 为了减少修改,我把数据库的切换实现放在了数据持久层。但业务逻辑层,请求它所依赖的dao时,可通过某个标志来实行数据库的选择。在本系统中,我是通过用户账号来动态选择数据库的,当然这个账号必须符合某种规则。否则,程序无法判断此用户账号是属于哪个数据库的。
具体实行代码我就不写了,总而言之,只要灵活使用bean 的作用域,动态切换数据库其实也是很容易实现的
分享到:
相关推荐
spring 动态切换数据库,根据类型切换所需数据库
Springcloud 多数库 多数据源整合,查询动态切换数据库
本源码以简单易懂的方式,讲述了spring动态切换数据库的原理和做法,内附有指导文件,按照说明操作,即可实现spring的数据库动态切换
springboot整合redis动态切换每个数据库,
数据库的动态切换在很多项目当中都有应用,经我查阅了多篇文档,整合思路最终成功实现数据源的动态切换功能,并稳定运行了一段时间未发现异常。 我的数据源切换时根据域名并配合spring来切换的,不同的域名访问...
NULL 博文链接:https://qdjinxin.iteye.com/blog/364572
SpringBoot的多数据源的动态切换项目源代码,适用于不同的用户操作不同的数据库,但是其对应的repository是一样的,可以进行http请求的动态数据源切换
Spring+Hibernate下的数据库连接动态切换
完整的Demo结合了springmvc——mybatis,实现了工具类文件上传下载,结合了Redis的初步使用,并且能使用threadlocal实现数据库动态切换,很适合初建项目做参考,适合初学者使用。
为了方便大伙学习和使用springM,SpringMvc系统多数据库动态切换,完整demo直接使用,下载后配置数据库可以正常运行
Spring+SpringMvc+MybatisPlus实现多数据源切换、利用自定义Aop注解,只需要在需要切换数据库的方法上加上注解即可实现、极大避免了代码冗余。
springboot实现数据源动态切换 注意事项: 1. 该demo采用yml配置数据库信息,注意url标签为jdbc-url 2.项目中加了日志输出,可看到完整执行过程 3.在Service中应用事务时,自定义的注解将失效,解决办法:可将注解...
Spring 动态切换 数据源 可同事在多个数据源中切换
springboot集成flowable6.5.0后适配达梦数据库,详情参考https://mp.csdn.net/mp_blog/creation/editor/121616637
SpringBoot,注解实现Redis 库的切换。
针对用户需求选择访问不同的数据库,用的是spring框架,访问不同数据库但表结构相同,不同数据库表结构不一样,不用数据库有些表结构一样有些又不一样! 首先,这个方案完全是在spring的框架下解决的,数据源依然...
spring多数据库项目代码;用于多个数据库切换查询。标准spring项目.
基于springboot的多数据库动态切换,通过注解的方法切换
使用maven构建项目,spring mvc,spring,分别与jdbctemplate,hibernate,mybatis全注解整合,其中包括包含有spring动态代理,数据库的事务处理。以及动态数据源的切换! 最新新增了ehcache缓存的应用 ...
通过SpringAop实现多数据源的动态切换 并采用Druid连接池,可扩展继续增加数据库配置。