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}}
Spring+Mybatis多数据源配置的更多相关文章
- Spring+MyBatis多数据源配置实现
最近用到了MyBatis配置多数据源,原以为简单配置下就行了,实际操作后发现还是要费些事的,这里记录下,以作备忘 不多废话,直接上代码,后面会有简单的实现介绍 jdbc和log4j的配置 #定义输出格 ...
- Spring Mybatis多数据源配置范例
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- spring mybatis 多数据源配置
1.创建好数据库的配置文件 mysql.url=jdbc:mysql://***/***?useUnicode=true&characterEncoding=UTF-8 mysql.usern ...
- springMVC+spring+mybatis多数据源配置
1.application.properties配置 <?xml version="1.0" encoding="UTF-8"?> <bean ...
- Spring实现多数据源配置
一.前言 对于小型项目,服务器与数据库是可以在同一台机子上的,但随着业务的庞大与负责,数据库和服务器就会分离开来.同时随着数据量的增大,数据库也要分开部署到多台机子上. 二.Spring配置文件修改 ...
- Spring Boot 2.X(五):MyBatis 多数据源配置
前言 MyBatis 多数据源配置,最近在项目建设中,需要在原有系统上扩展一个新的业务模块,特意将数据库分库,以便减少复杂度.本文直接以简单的代码示例,如何对 MyBatis 多数据源配置. 准备 创 ...
- MyBatis多数据源配置(读写分离)
原文:http://blog.csdn.net/isea533/article/details/46815385 MyBatis多数据源配置(读写分离) 首先说明,本文的配置使用的最直接的方式,实际用 ...
- spring,mybatis事务管理配置与@Transactional注解使用[转]
spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是至关 ...
- spring,mybatis事务管理配置与@Transactional注解使用
spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是 ...
随机推荐
- C# WebBrowser HttpWebRequest Cookie 的结合运用。
在WebBrowser下对网页进行操作其实是一件挺轻松的事情,他可以很方便实现自定义的网站访问习惯.而WebBrowser毕竟是对MS原生 控件的封装,当我们使用C#下的WebBrowser尤其是这样 ...
- visual studio 调试时遇到 System.BadImageFormatException
System.BadImageFormatException”类型的未经处理的异常在 未知模块. 中发生 其他信息: 未能加载文件或程序集“SendYourIP.exe”或它的某一个依赖项.生成此程序 ...
- LeetCode "Arranging Coins"
A simple math.. take care of data overflow though. class Solution { public: int arrangeCoins(int n) ...
- python学习笔记——2
Python的字符串 在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言. 对于单个字符的编码,Python提供了ord()函数获取字符的整数表示 ...
- 关于redis的主从复制
redis主从复制需要注意的一个问题 这两天我朋友在使用redis偶尔会遇见一个问题,就是所有的缓存莫名其妙会不见,找了好久都没找到,他一直以为 有人错误执行了什么命令 他跟我说的时候我估计是主从复制 ...
- Outlook2013 最小化Com加载项
- 使用7-zip制作自解压安装包
7-zip制作自解压包很方便,只要在压缩时选择”创建自释放程序”选项. 而自解压安装包有点麻烦,不如WinRAR方便. 准备工具:下载 LZMA SDK 这里面有 7zSD.sfx (16.04版7z ...
- 写给java开发的运维笔记
转载至:https://github.com/biezhi/java-bible/tree/master/learn_server
- [FFmpeg] ffmpeg 常用命令
1. 视频转换 比如一个avi文件,想转为mp4,或者一个mp4想转为ts. ffmpeg -i input.avi output.mp4 ffmpeg -i input.mp4 output.ts ...
- 反人类的MyEclipse之-调整JavaScript代码-花括号换行显示
然后将除最后一项外所有的都勾选为Next Line