spring多数据源

基于注解的Spring多数据源配置和使用

…衆ロ難τιáo~ 提交于 2019-11-29 10:07:15
前一段时间研究了一下spring多数据源的配置和使用,为了后期从多个数据源拉取数据定时进行数据分析和报表统计做准备。由于之前做过的项目都是单数据源的,没有遇到这种场景,所以也一直没有去了解过如何配置多数据源。 后来发现其实基于spring来配置和使用多数据源还是比较简单的,因为spring框架已经预留了这样的接口可以方便数据源的切换。 先看一下spring获取数据源的源码: 可以看到AbstractRoutingDataSource获取数据源之前会先调用determineCurrentLookupKey方法查找当前的lookupKey,这个lookupKey就是数据源标识。 因此通过重写这个查找数据源标识的方法就可以让spring切换到指定的数据源了。 第一步:创建一个DynamicDataSource的类,继承AbstractRoutingDataSource并重写determineCurrentLookupKey方法,代码如下: 1 public class DynamicDataSource extends AbstractRoutingDataSource { 2 3 @Override 4 protected Object determineCurrentLookupKey() { 5 // 从自定义的位置获取数据源标识 6 return

Spring+MyBatis多数据源配置实现

我怕爱的太早我们不能终老 提交于 2019-11-29 10:06:53
最近用到了MyBatis配置多数据源,原以为简单配置下就行了,实际操作后发现还是要费些事的,这里记录下,以作备忘 不多废话,直接上代码,后面会有简单的实现介绍 jdbc和log4j的配置 #定义输出格式 ConversionPattern=%d %-5p [%t] %c - %m%n log4j.rootLogger=DEBUG,Console log4j.logger.com.cnblogs.lzrabbit=DEBUG log4j.logger.org.springframework=ERROR log4j.logger.org.mybatis=ERROR log4j.logger.org.apache.ibatis=ERROR log4j.logger.org.quartz=ERROR log4j.logger.org.apache.axis2=ERROR log4j.logger.org.apache.axiom=ERROR log4j.logger.org.apache=ERROR log4j.logger.httpclient=ERROR #log4j.additivity.org.springframework=false #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j

springmvc +mybatis 配置多数据源

醉酒当歌 提交于 2019-11-29 10:06:36
1.数据源配置: jdbc_multiple.properties: # MySQL #============================================================================ jdbc.mysql.driver=com.mysql.jdbc.Driver jdbc.mysql.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true jdbc.mysql.username=root jdbc.mysql.password=root # MS SQL Server (JTDS) #============================================================================ jdbc.sqlserver.driver=net.sourceforge.jtds.jdbc.Driver jdbc.sqlserver.url=jdbc:jtds:sqlserver://127.0.0.1:1433/test jdbc.sqlserver.username=sa jdbc.sqlserver.password=sa # 通用配置

Spring + Mybatis 配置多个数据源

微笑、不失礼 提交于 2019-11-29 10:04:30
有的时候一个项目中需要同时访问两个数据库,而mybatis的默认配置是不行的,这就需要我们修改一下mybatis的配置文件。 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> <property name="url" value="${center.connectionURL}"/> <property name="username" value="${userName}"/> <property name="password" value="${password}"/> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.xxx.dao.center"/> <property name="sqlSessionFactoryBeanName" value="cneterSqlSessionFactory"/>

SpringMVC+ Mybatis 配置多数据源 + 自动数据源切换 + 实现数据库读写分离

荒凉一梦 提交于 2019-11-29 10:02:28
现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库。Master库负责数据更新和实时数据查询,Slave库当然负责非实时数据查询。因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,从而影响用户体验。我们通常的做法就是把查询从主库中抽取出来,采用多个从库,使用负载均衡,减轻每个从库的查询压力。   采用读写分离技术的目标:有效减轻Master库的压力,又可以把用户查询数据的请求分发到不同的Slave库,从而保证系统的健壮性。我们看下采用读写分离的背景。   随着网站的业务不断扩展,数据不断增加,用户越来越多,数据库的压力也就越来越大,采用传统的方式,比如:数据库或者SQL的优化基本已达不到要求,这个时候可以采用读写分离的策 略来改变现状。    具体到开发中,如何方便的实现读写分离呢?目前常用的有两种方式:   1 第一种方式是我们最常用的方式,就是定义2个数据库连接,一个是MasterDataSource,另一个是SlaveDataSource。更新数据时我们读取MasterDataSource,查询数据时我们读取SlaveDataSource。这种方式很简单,我就不赘述了。   2 第二种方式动态数据源切换,就是在程序运行时

一个Web项目中实现多个数据库存储数据并相互切换用过吗?

空扰寡人 提交于 2019-11-29 10:02:03
最近公司一个项目需要连接多个数据库(A和B)操作,根据不同的业务模块查询不同的数据库,因此需要改造下之前的spring-mybatis.xml配置文件以及jdbc.properties配置文件,项目后台用的是SpringMVC+Mybatis+MySQL架构,折腾了一两天算是搞定了,在这里记录过改造过程。 使用场景 多数据源的使用的场景一般有: 主从数据库切换 读写分离 兼容旧库 实现原理 Spring2.x的版本中采用Proxy模式,就是在方案中实现一个虚拟的数据源,并且用它来封装数据源选择逻辑,这样就可以有效地将数据源选择逻辑从Client中分离出来。Client提供选择所需的上下文,由虚拟的DynamicDataSource根据Client提供的上下文来实现数据源的选择。 具体的实现是虚拟的DynamicDataSource仅需继承 AbstractRoutingDataSource 实现 determineCurrentLookupKey (),该方法返回需要使用的DataSource的key值,然后根据这个key从resolvedDataSources这个map里取出对应的DataSource,如果找不到则用默认的resolvedDefaultDataSource。 详细实现过程 1:修改jdbc.properties的配置文件   #A 数据源A库   jdbc.a

Spring+MyBatis多数据源配置实现

◇◆丶佛笑我妖孽 提交于 2019-11-27 09:33:45
jdbc和log4j的配置 #定义输出格式 ConversionPattern =%d %-5p [ %t ] %c - %m%n log4j.rootLogger =DEBUG, Console log4j.logger.com.cnblogs.lzrabbit = DEBUG log4j.logger.org.springframework = ERROR log4j.logger.org.mybatis = ERROR log4j.logger.org.apache.ibatis = ERROR log4j.logger.org.quartz = ERROR log4j.logger.org.apache.axis2 = ERROR log4j.logger.org.apache.axiom = ERROR log4j.logger.org.apache = ERROR log4j.logger.httpclient = ERROR #log4j.additivity.org.springframework = false #Console log4j.appender.Console = org.apache.log4j.ConsoleAppender log4j.appender.Console.Threshold = DEBUG log4j.appender

Spring Boot整合多数据源之JPA

非 Y 不嫁゛ 提交于 2019-11-27 00:12:50
Spring Boot整合多数据源之JPA 前言 创建工程 导入依赖 基本配置 多数据源配置 前言 之前的文章讲过Spring Boot整合多数据源中用到了JdbcTemplate或Mybatis,本文中我们将使用JPA来整合多数据源。在Spring Boot整合JbdcTemplate多数据源、Spring Boot 整合 MyBatis 多数据源以及 Spring Boot 整合 JPA 多数据源中,整合JPA多数据源算是最复杂的一种,也是很多人在配置时最容易出错的一种。本文将引导大家一步一步整合JPA多数据源。 创建工程 首先是创建一个Spring Boot工程,创建时添加基本的Web、Jpa以及MySQL依赖 导入依赖 创建完成后,添加Druid依赖,这里和前文的要求一样,要使用专为Spring Boot打造的Druid,大伙可能发现了,如果整合多数据源一定要使用这个依赖,因为这个依赖中才有DruidDataSourceBuilder,最后还要记得锁定数据库依赖的版本,因为可能大部分人用的还是5.x的MySQL而不是8.x。完整依赖如下: < dependencies > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter

Spring Boot多数据源配置之Template

喜夏-厌秋 提交于 2019-11-26 19:45:12
Spring Boot多数据源配置之Template 前言 代码实现 依赖引入 配置数据源 加载配置文件 配置JdbcTemplate实例 测试 前言   多数据源配置也算是一个常见的开发需求,在Spring和Spring Boot中,对此都有相应的解决方案,不过一般来说,如果有多数据源的需求,还是建议首选分布式数据库中间件 MyCat 去解决相关问题。当然如果一些简单的需求,还是可以使用多数据源的,Spring Boot中,JdbcTemplate、MyBatis以及JPA都可以配置多数据源,本文就先和大伙聊一聊 JdbcTemplate 中多数据源的配置。 代码实现 依赖引入 和单数据源一样,需要引入如下的依赖 < dependencies > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-jdbc </ artifactId > </ dependency > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-web </ artifactId > </ dependency

SpringMVC配置多个数据源

时光总嘲笑我的痴心妄想 提交于 2019-11-26 16:57:01
多数据源,说白了,就是多数据库。 想要实现多数据库查询,只需简单四步即可实现! 但这种实现方式有缺点,不能够实时切换数据库。有时间我会补一篇,通过AOP实现数据库切换的博客,通过aop+注解实现比较好。 第一步: 配置 jdbc.properties; 1 # MySQL 2 #============================================================================ 3 jdbc.mysql.driver=com.mysql.jdbc.Driver 4 jdbc.mysql.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true 5 jdbc.mysql.username=root 6 jdbc.mysql.password=root 7 8 # MS SQL Server (JTDS) 9 #============================================================================ 10 jdbc.sqlserver.driver=net.sourceforge.jtds.jdbc.Driver 11 jdbc