一、配置文件

properties

ds1.driverClassName=com.mysql.jdbc.Driver
ds1.url=jdbc:mysql://192.168.200.130:3306/test1?useUnicode=true&characterEncoding=UTF-8
ds1.username=hhh
ds1.password=123456  ds2.driverClassName=oracle.jdbc.OracleDriver
ds2.url=jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=UTF-8
ds2.username=qqq
ds2.password=123456

xml

   <bean id="dataSource" class="com.hhhqqq.datasource.DynamicDataSource">  <property name="targetDataSources">  <map key-type="java.lang.String">  <entry key="ds1" value-ref="ds1" />  <entry key="ds2" value-ref="ds2" />  </map>  </property>  <property name="defaultTargetDataSource" ref="ds1" />  </bean>  <bean id="ds1" class="com.alibaba.druid.pool.DruidDataSource"  destroy-method="close">  <property name="driverClassName" value="${ds1.driverClassName}" />  <property name="url" value="${ds1.url}" />  <property name="username" value="${ds1.username}" />  <property name="password" value="${ds1.password}" />  </bean>  <bean id="ds2" class="com.alibaba.druid.pool.DruidDataSource"  destroy-method="close">  <property name="driverClassName" value="${ds2.driverClassName}" />  <property name="url" value="${ds2.url}" />  <property name="username" value="${ds2.username}" />  <property name="password" value="${ds2.password}" />  </bean>

二、Java文件

com.hhhqqq.datasource.DynamicDataSource源码

import java.util.logging.Logger;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extends AbstractRoutingDataSource {/** * 取得当前使用那个数据源。 */  @Override  protected Object determineCurrentLookupKey() {  return DataSourceContextHolder.getDbType();    }  public Logger getParentLogger() {  // TODO Auto-generated method stub  return null;  }
}

DataSourceContextHolder源码

public class DataSourceContextHolder {private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();  /** * 设置当前数据库。 * @param dbType */  public static void setDbType(String dbType)  {  contextHolder.set(dbType);  }  /** * 取得当前数据源。 * @return */  public static String getDbType()  {  String str = (String) contextHolder.get();  return str;  }  /** * 清除上下文数据 */  public static void clearDbType()  {  contextHolder.remove();  }
}

三、注意点

Spring单数据源直接在<bean id="dataSource">下配置数据源的各种连接参数。但动态数据源需要配置个各个数据源例如ds1、ds2等。然后在dataSource中动态根据传递过来的参数动态调用不同的数据源。
1、当进行访问时,首先通过DataSourceContextHolder.setDbType("ds1");设置需要使用的数据源。DataSourceContextHolder就是一个用来存储数据源信息的类,其中通过ThreadLocal来记录数据源信息。
2、DynamicDataSource类集成Spring的AbstractRoutingDataSource类,通过determineCurrentLookupKey方法来获取数据源类型,如果没有对应的数据源则使用defaultTargetDataSource配置。
3、当设置了数据源之后会一直使用该数据源进行连接,除非使用 DataSourceContextHolder.setDbType重新设置数据源或使用DataSourceContextHolder.clearDbType()清除,清除后使用defaultTargetDataSource进行连接。(这点很重要)

转载自:https://my.oschina.net/qweasfzxc880/blog/621113?p={{page}}

转载于:https://www.cnblogs.com/aaron-shu/p/5985659.html

Spring+Mybatis多数据源配置相关推荐

  1. spring mybatis 多数据源配置 jeesite 多数据源配置

    spring mybatis 多数据源配置 jeesite 多数据源配置 一.情景描述 在系统数据达到一定的访问量时,遇到单个数据库瓶颈,所以需要扩展数据库,启用第二个数据源资源,项目架构变成 一个服 ...

  2. Spring+Mybatis多数据源配置(一)——MySQL与Oracle通过配置切换

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  3. Spring+Mybatis多数据源配置(三)——Spring如何获取Properties文件的信息

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  4. Spring+MyBatis 多数据源配置和切换

    两台 MySQL 数据库(属于 master-slave 主从关系),基于 Java8,Spring4,MyBatis3.2 环境. maven 依赖配置 <dependencies>&l ...

  5. Spring+Mybatis 多数据源配置

    2013-03-14  项目目录结构如下: spring配置文件 Xml代码  <?xml version="1.0" encoding="UTF-8"? ...

  6. Spring+Mybatis多数据源配置(四)——AbstractRoutingDataSource实现数据源动态切换

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  7. Spring+Mybatis多数据源配置(二)——databaseIdProvider的使用

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  8. Spring+MyBatis多数据源配置实现

    最近用到了MyBatis配置多数据源,原以为简单配置下就行了,实际操作后发现还是要费些事的,这里记录下,以作备忘 不多废话,直接上代码,后面会有简单的实现介绍 jdbc和log4j的配置 #定义输出格 ...

  9. Spring实现多数据源配置

    一.前言 对于小型项目,服务器与数据库是可以在同一台机子上的,但随着业务的庞大与负责,数据库和服务器就会分离开来.同时随着数据量的增大,数据库也要分开部署到多台机子上. 二.Spring配置文件修改 ...

最新文章

  1. Centos6 系统下,已经安装vim的前提下。执行操作vim,出现报错
  2. 怎么用python打印照片_[宜配屋]听图阁
  3. PHP 字符处理 加密解密 函数收集
  4. Spotify开源其Cassandra编排工具cstar
  5. ubuntu基于apache+postgresql编译安装zabbix
  6. Linux的vx开头的文件,linux文件系统简述
  7. python可以开发驱动吗_Python机器学习实践:测试驱动的开发方法
  8. ios实例开发精品文章推荐(8.5)
  9. 关于谷歌云,你应该知道的一切! | 技术头条
  10. 视频直接变漫画!GAN又有了新玩法 | Demo+代码+论文
  11. android 源码开发 关于编译等小知识点总结
  12. 实习语录@秒针系统[上]
  13. Windows下TexLive2015 TeXstudio 和SumatraPDF安装配置
  14. 在Ubuntu上使用Netdata设置实时性能监控
  15. 詹森不等式的积分形式
  16. 产品读书.心理学《人际交往心理学》
  17. 解决windows server 2003安装dhcp服务器的问题
  18. 【华为机试真题 Python实现】勾股数元祖
  19. canvas乱码的处理
  20. 电脑端epub阅读软件分享

热门文章

  1. c++中判断某个值在字典的value中_Python核心知识系列:字典
  2. ubuntu18.04搭建 kubernetes(k8s)集群
  3. C/C++函数调用的压栈模型
  4. java多线程中几个常用的方法
  5. 图解 Redis 五种数据结构底层实现
  6. LevelDB原理及应用
  7. 梯度迭代树回归(GBDT)算法介绍及Spark MLlib调用实例(Scala/Java/python)
  8. OSChina 周四乱弹 ——我高考,媳妇还在读小学
  9. Activiti Modeler发布以及教程
  10. gulp + webpack 构建多页面前端项目 1