要配置多个数据源,我们就需要写多个bean,每个bean对应一个数据源。难点在于,如何控制多个数据源之间的切换。这里我们需要借助ThreadLocal类,这个类位于java.lang包下,首先说明ThreadLocal存放的值是线程内共享的,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递,这样处理后,能够优雅的解决一些实际问题

自定义DynamicDataSource类,用于切换数据源

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource {public static final String DEFAULT_DATA_SOURCE = "default";public static final String SILENCER_DATA_SOURCE = "silencer";public static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();public static String getCustomerType() {return contextHolder.get();}public static void setCustomerType(String customerType) {contextHolder.set(customerType);}public static void clearCustomerType(String customerType) {contextHolder.remove();}@Overrideprotected Object determineCurrentLookupKey() {return getCustomerType();}}

配置多个bean

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation" value="classpath:config/mybatis-config.xml" /><property name="mapperLocations" value="classpath:mappers/**/*.xml" /></bean>    <bean id="dataSource" class="com.silencer.web.utils.DynamicDataSource"><property name="targetDataSources"><map key-type="java.lang.String"><entry key="default" value-ref="defaultDataSource" /><entry key="silencer" value-ref="silencerDataSource" /></map></property><property name="defaultTargetDataSource" ref="defaultDataSource" /></bean><bean id="defaultDataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"><property name="driverClass" value="${default.jdbc.driver}" /><property name="jdbcUrl" value="${default.jdbc.url}" /><property name="user" value="${default.jdbc.username}" /><property name="password" value="${default.jdbc.password}" /><property name="initialPoolSize" value="${default.initialPoolSize}" /><property name="maxPoolSize" value="${default.maxPoolSize}" /><property name="minPoolSize" value="${default.minPoolSize}" /><property name="maxIdleTime" value="${default.maxIdleTime}" /><property name="checkoutTimeout" value="${default.checkoutTimeout}" /></bean><bean id="silencerDataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"><property name="driverClass" value="${silencer.jdbc.driver}" /><property name="jdbcUrl" value="${silencer.jdbc.url}" /><property name="user" value="${silencer.jdbc.username}" /><property name="password" value="${silencer.jdbc.password}" /><property name="initialPoolSize" value="${silencer.initialPoolSize}" /><property name="maxPoolSize" value="${silencer.maxPoolSize}" /><property name="minPoolSize" value="${silencer.minPoolSize}" /><property name="maxIdleTime" value="${silencer.maxIdleTime}" /><property name="checkoutTimeout" value="${silencer.checkoutTimeout}" /></bean>

map中的key值和DynamicDataSourec类中定义的DEFAULT_DATA_SOURCE名称相同

每次请求都会连接默认数据源,其他数据源需要手动切换

DynamicDataSource.setCustomerType(DynamicDataSource.SILENCER_DATA_SOURCE);

也可以同过aop定义注解的方式来切换数据源

springMVC配置多数据源相关推荐

  1. springmvc+mybatis多数据源配置,AOP注解动态切换数据源

    springmvc与springboot没多大区别,springboot一个jar包配置几乎包含了所有springmvc,也不需要繁琐的xml配置,springmvc需要配置多种jar包,需要繁琐的x ...

  2. SpringMVC+Mybatis+Maven搭建 简单配置双数据源

    POM.xml引包常用的 mybatis  以及 mybatis-spting  spring-webmvc log4j spring-jdbc servler-api spring-jdbc < ...

  3. spring+SpringMVC+MyBatis之配置多数据源

    数据库准备 1.准备2个数据库,本例以mysql为例 在第一个数据库新建表user -- ---------------------------- -- Table structure for use ...

  4. springmvc 配置多个数据源,并动态切换

    前言:工作中经常会有两个数据源的情况,所以记录一下.这里测试两个数据源,给出流程和代码. 首先:配置两个数据源 <description>配置mybatis数据源</descript ...

  5. SpringMVC 中xml 配置多数据源

    1,配置jdbc.properties jdbc.driver_one=... jdbc.url_one=..... jdbc.username_one=... jdbc.password_one=. ...

  6. tomcat中配置jndi数据源以便spring获取

    [0]README 0)intro to jndi, plase visit intro to jndi: 1)本文译自 Configuring Spring MVC JdbcTemplate wit ...

  7. Springboot环境下mybatis配置多数据源配置

    mybatis多数据源配置(本文示例为两个),方便实现数据库的读写分离,分库分表功能 本文基于springboot2进行的配置,如版本为springboot1系列则需修改yml的配置(在文末附带) m ...

  8. Spring中配置DataSource数据源的几种选择

    Spring中配置DataSource数据源的几种选择 在Spring框架中有如下3种获得DataSource对象的方法: 从JNDI获得DataSource. 从第三方的连接池获得DataSourc ...

  9. springmvc配置DispatcherServlet拦截url注意事项

    <!-- 前端控制器 --><servlet><servlet-name>springmvc</servlet-name><servlet-cla ...

最新文章

  1. asp.net 2.0中新增的AppendDataBoundItems .dropdownlist 添加第一项
  2. Linux 入门基础
  3. Atom-无懈可击的Markdown编辑器
  4. MAP文件和调试(VC)(从崩溃地址找出错源码位置)
  5. mysql使用主从复制迁移,[MySQL进阶之路][No.0003] 主从复制(Replication)在运维中的运用...
  6. 如何开发一个异常检测系统:异常检测 vs 监督学习
  7. 用注册表禁止windows添加新用户
  8. 利用函数wavread对语音信号进行采样_统计与自适应信号处理知识点总结-期末考试...
  9. 代码jquery分享一款jquery加载csv文件的代码
  10. 2021-2025年中国再生聚酯行业市场供需与战略研究报告
  11. 倒计时 1 天!第十六届开源中国开源世界高峰论坛日程曝光,邀您共同缔造开源创新模式!...
  12. 简要说明下maven的作用_Maven资料库–简要指南
  13. 浅析那些带着“主角光环“的泰坦尼克号幸存者
  14. 使用Lettuce执行命令,应该有多个返回值却只取到一个。
  15. 超级终端之——MobaXterm
  16. WebService框架简介
  17. 中环混改尚存变数 高调的TCL要上演“资本魔输”?
  18. 安卓 基于百度LBS的定位
  19. 2019.9.15训练总结
  20. 运动蓝牙耳机什么牌子好,骑行运动耳机

热门文章

  1. 计算机考试的知识要记忆背,2017计算机等级考试(NCRE)备考小技巧
  2. 国际学校入学考试MAP语法测试题真题讲解
  3. 华为S5300系列交换机V200R001SPH027升级补丁
  4. 运动装备怎么选?运动装备品牌排行榜
  5. 联通沃云发布全新战略:强大基座,就在身边
  6. 仿真工具打开raw报cannot load library XXX.dll错误
  7. 设计模式之六:工厂方法模式(Factory method Pattern)
  8. 来自1959《粉红色潜艇》的经典语录
  9. 小米8探索版线刷兼救砖_解账户锁_纯净刷机包_教程
  10. 双十一游戏发烧友都在推荐的电子竞技显示器