Spring动态多数据源配置实例Demo

 更新时间:2017年01月07日 16:29:57   作者:wangpeng047  
本篇文章主要介绍了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多数据源配置:https://www.jb51.net/article/102282.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java 正则表达式入门详解(基础进阶)

    Java 正则表达式入门详解(基础进阶)

    最近看到很多同学想要学习java正则表达式的一些知识,那么脚本之家小编就为大家介绍一下,其实正则表达式实用性很强,处理大幅文字的时候都需要用得到,语法也大同小异
    2017-10-10
  • springboot实现rabbitmq消息确认的示例代码

    springboot实现rabbitmq消息确认的示例代码

    RabbitMQ的消息确认有两种, 一种是消息发送确认,第二种是消费接收确认,本文主要介绍了springboot实现rabbitmq消息确认的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Spring IOC 三种配置方式详解

    Spring IOC 三种配置方式详解

    这篇文章主要介绍了Spring IOC 三种配置方式,基于xml配置方式组件管理,基于注解方式管理和配置类方式管理,这三种方式,通过图文讲解的非常详细,需要的朋友可以参考下
    2024-05-05
  • java常见的字符串操作和日期操作汇总

    java常见的字符串操作和日期操作汇总

    本文主要对java 常见的字符串操作和日期操作进行整理。具有一定的参考价值,需要的朋友一起来看下吧
    2016-12-12
  • 浅谈java中为什么重写equals后需要重写hashCode

    浅谈java中为什么重写equals后需要重写hashCode

    今天带各位学习一下java中为什么重写equals后需要重写hashCode,文中有非常详细的图文介绍及代码示例,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • Spring如何替换掉默认common-logging.jar

    Spring如何替换掉默认common-logging.jar

    这篇文章主要介绍了Spring如何替换掉默认common-logging.jar,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • SpringBoot+MyBatisPlus中乐观锁的实现示例

    SpringBoot+MyBatisPlus中乐观锁的实现示例

    乐观锁是一种用于解决并发冲突的机制,在数据库中用于保护数据的一致性,本文主要介绍了SpringBoot+MyBatisPlus中乐观锁的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • 关于easyExcel中读取Excel表头的实例说明

    关于easyExcel中读取Excel表头的实例说明

    EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称,下面这篇文章主要给大家介绍了关于easyExcel中读取Excel表头的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Java实现对一行英文进行单词提取功能示例

    Java实现对一行英文进行单词提取功能示例

    这篇文章主要介绍了Java实现对一行英文进行单词提取功能,结合实例形式分析了java基于StringTokenizer类进行字符串分割的相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • 详解jeefast和Mybatis实现二级联动的问题

    详解jeefast和Mybatis实现二级联动的问题

    这篇文章主要介绍了详解jeefast和Mybatis实现二级联动的问题,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10

最新评论