2019独角兽企业重金招聘Python工程师标准>>>

前段时间遇到多数据源动态切换问题,总结一下,做个记录,以备后续之需!

首先附上proxool连接池的配置方法:http://312350968.iteye.com/blog/1697508

proxool连接池是相对不叫稳定的第三方连接池,可以很好的跟spring结合,实现项目中动态切换数据源,大体的实现原理是继承AbstractRoutingDataSource类来实现动态切换.

具体代码如下:

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;import com.mmc.util.LogUtil;
/*** @author Wang Huifeng**/
public class DynamicDataSource extends AbstractRoutingDataSource  {  /*** 动态切换数据源*/@Override  protected Object determineCurrentLookupKey() { Object key=DataSourceContextHolder. getDataSourceType();if(key==null){LogUtil.log("当前数据源是:"+DataSourceType.DB1);}else{LogUtil.log("当前数据源是:"+key);}return key;}}
/*** @author Wang Huifeng**/
public class DataSourceType {public static final String DB1="db1";public static final String DB2="db2";
}
/*** @author Wang Huifeng**/
@SuppressWarnings("unchecked")
public class DataSourceContextHolder {private static final ThreadLocal contextHolder = new ThreadLocal();public static void clearDataSourceType() {contextHolder.remove();}public static String getDataSourceType() {return (String) contextHolder.get();}public static void setDataSourceType(String dataSourceType) {contextHolder.set(dataSourceType);}
}
下面是是项目中如何调用以及spring配置文件中如何配置多数据源:proxool的配置文件,目前该配置文件只有两个数据源## proxool configuration
jdbc-0.proxool.alias=db1
jdbc-0.proxool.driver-class=com.mysql.jdbc.Driver
jdbc-0.proxool.driver-url=jdbc\:mysql\://192.168.1.221\:3306/demo3?useUnicode\=true&characterEncoding\=utf-8
jdbc-0.user=root
jdbc-0.password=123456
jdbc-0.proxool.minimum-connection-count=25
jdbc-0.proxool.maximum-connection-count=100
jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE
jdbc-0.proxool.statistics=1m,15m,1d
jdbc-0.proxool.house-keeping-sleep-time=6000
jdbc-0.proxool.simultaneous-build-throttle=20
jdbc-0.proxool.prototype-count=3
jdbc-0.proxool.trace=true## proxool configuration
jdbc-1.proxool.alias=db2
jdbc-1.proxool.driver-class=com.mysql.jdbc.Driver
jdbc-1.proxool.driver-url=jdbc\:mysql\://192.168.1.221\:3306/demo2?useUnicode\=true&characterEncoding\=utf-8
jdbc-1.user=root
jdbc-1.password=123456
jdbc-1.proxool.minimum-connection-count=25
jdbc-1.proxool.maximum-connection-count=100
jdbc-1.proxool.house-keeping-test-sql=select CURRENT_DATE
jdbc-1.proxool.statistics=1m,15m,1d
jdbc-1.proxool.house-keeping-sleep-time=6000
jdbc-1.proxool.simultaneous-build-throttle=20
jdbc-1.proxool.prototype-count=3
jdbc-1.proxool.trace=true该方法是如何切换数据源
DataSourceContextHolder.setDataSourceType(DataSourceType.DB1);改段代码是如何在spring中配置多数据源:<!-- Proxool 数据源 --><bean id="dataSource1"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName"><value>org.logicalcobwebs.proxool.ProxoolDriver</value></property><property name="url"><value>proxool.db1</value></property></bean><bean id="dataSource2"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName"><value>org.logicalcobwebs.proxool.ProxoolDriver</value></property><property name="url"><value>proxool.db2</value></property></bean><bean id="dataSource" class="com.mmc.dataSourceUtil.DynamicDataSource"><property name="targetDataSources"><map key-type="java.lang.String"><entry key="db1" value-ref="dataSource1" /><entry key="db2" value-ref="dataSource2" /></map></property><property name="defaultTargetDataSource" ref="dataSource1" /></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" /><!-- 扫描带注解的实体类 --><property name="packagesToScan"><list><value>com.mmc.pojo</value></list></property><!-- 提供注解扫描类的设置 --><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><!--<prop key="hibernate.show_sql">true</prop> <propkey="hibernate.format_sql">true</prop>--><prop key="hibernate.jdbc.batch_size">50</prop><prop key="hibernate.connection.autocommit">true</prop><prop key="hibernate.cache.use_query_cache">false</prop><prop key="hibernate.cache.use_second_level_cache">true</prop><prop key="hibernate.cglib.use_reflection_optimizer">true</prop></props></property></bean>

转载于:https://my.oschina.net/HuifengWang/blog/232946

Proxool配置多数据源动态切换相关推荐

  1. Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法

    原文地址:http://www.cnblogs.com/hoojo/p/Spring_Hibernate_MyBatis_MultipleDataSource_switchDataSource.htm ...

  2. Spring3 整合MyBatis3 配置多数据源 动态选择SqlSessionFactory

    一.摘要 上两篇文章分别介绍了Spring3.3 整合 Hibernate3.MyBatis3.2 配置多数据源/动态切换数据源 方法 和 Spring3 整合Hibernate3.5 动态切换Ses ...

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

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

  4. springboot多数据源动态切换和自定义mybatis分页插件

    1.配置多数据源 增加druid依赖 完整pom文件 数据源配置文件 route.datasource.driver-class-name= com.mysql.jdbc.Driver route.d ...

  5. SpringBoot+AOP实现多数据源动态切换

    SpringBoot+AOP实现多数据源动态切换 背景 设计总体思路 步骤 背景 系统后端需要访问多个数据库,现有的数据库连接配置写入配置文件中.后端需要从一个数据库的配置表里动态的读取其它mysql ...

  6. Spring-Boot + AOP实现多数据源动态切换

    2019独角兽企业重金招聘Python工程师标准>>> 最近在做保证金余额查询优化,在项目启动时候需要把余额全量加载到本地缓存,因为需要全量查询所有骑手的保证金余额,为了不影响主数据 ...

  7. springboot使用mybatis多数据源动态切换的实现

    需求:项目使用了读写分离,或者数据进行了分库处理,我们希望在操作不同的数据库的时候,我们的程序能够动态的切换到相应的数据库,执行相关的操作. 首先,你需要一个能够正常运行的springboot项目,配 ...

  8. Springboot 从数据库读取数据库配置信息,动态切换多数据源 最详细实战教程

    以前写过一篇教程,Springboot AOP方式切换多数据源(主从两库类似情况使用最佳): https://blog.csdn.net/qq_35387940/article/details/100 ...

  9. spring boot 切换 oracle 和 mysql_spring-boot多数据源动态切换

    作者:码农教程 出自:码农教程 原文:manongjc.com/detail/14-ucsldoihyzmwcui.html 当项目中存在多数据源时,就涉及到数据源的动态切换,通过研究,特此记录一下. ...

最新文章

  1. 候选翻译文章列表[示范]
  2. 问题解决: SSR 的 1080 端口被占用
  3. Linux 防火墙:Netfilter iptables
  4. java编写正则表达式_如何用Java编写最快的表达式评估器之一
  5. IoT日志利器:嵌入式日志客户端(C Producer)发布
  6. django处理静态文件
  7. phpmyadmin mysql float 长度_mysql – phpMyAdmin – “请输入有效长度”
  8. mysql 建立索引_mysql建立索引的原则
  9. c语言用数字定义字符串,c语言怎么定义数字字符串 c语言怎么把数字字符定义字符串...
  10. EnableQ,细腻让其与众不同
  11. Xshell的安装及使用超详细教程
  12. Stuck Stack成过去时,OpenStack升级还可以这样玩?!
  13. cdr圆形渐变填充怎么设置_适用于平面设计的软件cdr!
  14. [转]禅修程序员十诫
  15. Windows 10调整色温显示器
  16. 使用plugman开发cordova 高德地图定位插件
  17. BlueTeam 应急
  18. pb中操作excel表格函数
  19. 可以发布任务悬赏的app
  20. 新日+苏宁O2O,电动车市迎来智慧零售新时代

热门文章

  1. 清华大学:2021元宇宙研究报告!
  2. 现金奖励+实习offer!数据库大赛来了
  3. Tianchi发布最新AI知识树!
  4. PyTorch Tricks 集锦
  5. 高效学习方法论的学习笔记
  6. BERT是图像预训练未来?字节跳动iBOT刷新十几项SOTA,部分指标超MAE
  7. 重磅!2022QS世界大学排名公布!
  8. 带动画效果的卷积神经网络的讲解.pptx
  9. 当专业动画师用GAN帮自己“偷懒”,几分钟就完成了几周的工作
  10. 输入示例,自动生成代码:TensorFlow官方工具TF-Coder已开源