Spring+Mybatis多数据源配置
一、配置文件
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多数据源配置相关推荐
- spring mybatis 多数据源配置 jeesite 多数据源配置
spring mybatis 多数据源配置 jeesite 多数据源配置 一.情景描述 在系统数据达到一定的访问量时,遇到单个数据库瓶颈,所以需要扩展数据库,启用第二个数据源资源,项目架构变成 一个服 ...
- Spring+Mybatis多数据源配置(一)——MySQL与Oracle通过配置切换
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- Spring+Mybatis多数据源配置(三)——Spring如何获取Properties文件的信息
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- Spring+MyBatis 多数据源配置和切换
两台 MySQL 数据库(属于 master-slave 主从关系),基于 Java8,Spring4,MyBatis3.2 环境. maven 依赖配置 <dependencies>&l ...
- Spring+Mybatis 多数据源配置
2013-03-14 项目目录结构如下: spring配置文件 Xml代码 <?xml version="1.0" encoding="UTF-8"? ...
- Spring+Mybatis多数据源配置(四)——AbstractRoutingDataSource实现数据源动态切换
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- Spring+Mybatis多数据源配置(二)——databaseIdProvider的使用
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- Spring+MyBatis多数据源配置实现
最近用到了MyBatis配置多数据源,原以为简单配置下就行了,实际操作后发现还是要费些事的,这里记录下,以作备忘 不多废话,直接上代码,后面会有简单的实现介绍 jdbc和log4j的配置 #定义输出格 ...
- Spring实现多数据源配置
一.前言 对于小型项目,服务器与数据库是可以在同一台机子上的,但随着业务的庞大与负责,数据库和服务器就会分离开来.同时随着数据量的增大,数据库也要分开部署到多台机子上. 二.Spring配置文件修改 ...
最新文章
- Centos6 系统下,已经安装vim的前提下。执行操作vim,出现报错
- 怎么用python打印照片_[宜配屋]听图阁
- PHP 字符处理 加密解密 函数收集
- Spotify开源其Cassandra编排工具cstar
- ubuntu基于apache+postgresql编译安装zabbix
- Linux的vx开头的文件,linux文件系统简述
- python可以开发驱动吗_Python机器学习实践:测试驱动的开发方法
- ios实例开发精品文章推荐(8.5)
- 关于谷歌云,你应该知道的一切! | 技术头条
- 视频直接变漫画!GAN又有了新玩法 | Demo+代码+论文
- android 源码开发 关于编译等小知识点总结
- 实习语录@秒针系统[上]
- Windows下TexLive2015 TeXstudio 和SumatraPDF安装配置
- 在Ubuntu上使用Netdata设置实时性能监控
- 詹森不等式的积分形式
- 产品读书.心理学《人际交往心理学》
- 解决windows server 2003安装dhcp服务器的问题
- 【华为机试真题 Python实现】勾股数元祖
- canvas乱码的处理
- 电脑端epub阅读软件分享
热门文章
- c++中判断某个值在字典的value中_Python核心知识系列:字典
- ubuntu18.04搭建 kubernetes(k8s)集群
- C/C++函数调用的压栈模型
- java多线程中几个常用的方法
- 图解 Redis 五种数据结构底层实现
- LevelDB原理及应用
- 梯度迭代树回归(GBDT)算法介绍及Spark MLlib调用实例(Scala/Java/python)
- OSChina 周四乱弹 ——我高考,媳妇还在读小学
- Activiti Modeler发布以及教程
- gulp + webpack 构建多页面前端项目 1