Spring动态多数据源配置实例Demo
最近由于咨询spring如何配置多数据源的人很多,一一回答又比较麻烦,而且以前的博文中的配置也是有问题,因此特此重新发布一个demo给大家。
demo*有两个数据源,即mysql和oracle,并已经进行简单测试,动态切换数据源是没有问题的,希望借此demo能帮助到大家。
demo下载地址:
spring动态切换多数据源demo:http://xiazai.jb51.net/201701/yuanma/dynamicdatasourcedemo_jb51.rar
另外我给些说明,阐述下多数据源配置时的重点:
1. 注意事务拦截器的配置
这是首要的一条。首先你要明白,spring的事务管理是与数据源绑定的,一旦程序执行到事务管理的那一层(如service)的话,由于在进入该层之前事务已经通过拦截器开启,因此在该层切换数据源是不行的,明白事务的原理是尤为重要的,我之前的文章中,将切换数据源的拦截器配置在了dao层是有问题的(因为是示例,所以粗心了,对误导了大家我表示道歉),但提供的思路是没有问题的。
demo中将切换数据源的拦截器(datasourceinterceptor)配置在了事务拦截器(txadvice)的上一层,也就是controller层。
2. 注意数据库表的创建
一些人喜欢用hibernate的自动创建表的功能,但需要注意,在多数据源中,尤其是不同数据库的多数据源,想都自动建表是不行的。因为hibernate自动建表是在项目启动时触发的,因此只会建立项目配置的默认数据源的表,而其他数据源的表则不会自动创建。大家要注意着点。
3. hibernate的数据库方言(dialect)可以忽略
在多数据源时,方言的设置可以忽略,hibernate在使用时会自动识别不同的数据库,因此不必纠结这个配置,甚至不配置也可以。
4. 报no current session错误
这个是因为使用了sessionfactory.getcurrentsession()导致的,current session是与线程绑定的,一个线程只会开启一个session(除非使用opensession()就不会报错),因此需要设置session与线程的绑定关系。
demo中使用了spring管理hibernate的session,因此在web.xml中配置了opensessioninviewfilter,并在hibernate.cfg.xml中配置了current_session_context_class。【ps:使用spring管理hibernate时,可以去掉hibernate.cfg.xml,而全部配置的spring的配置文件里,即hibernateproperties。看个人喜好吧】
最后,demo中简单集成了一些框架,方便大家拿来就用,算是送给大家的福利,关于那些框架的配置和技术,这里就不再阐述了。想要了解的可以看一下地址:
spring多数据源配置:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: JAVA中的final关键字用法实例详解
下一篇: 深入理解Spring AOP
推荐阅读
-
Spring动态多数据源配置实例Demo
-
Spring配置动态数据源实现读写分离的方法
-
Spring Boot 2.0多数据源配置方法实例详解
-
spring boot + mybatis实现动态切换数据源实例代码
-
Spring配置多个数据源并实现动态切换示例
-
Spring配置多个数据源并实现动态切换示例
-
Spring + Mybatis 项目实现动态切换数据源实例详解
-
Spring3 整合MyBatis3 配置多数据源动态选择SqlSessionFactory详细教程
-
spring boot + mybatis实现动态切换数据源实例代码
-
Spring3 整合MyBatis3 配置多数据源动态选择SqlSessionFactory详细教程