spring+mybatis 多数据源切换

摘自: http://www.oschina.net/code/snippet_347813_12525

1. 代码: DbContextHolder

public class DbContextHolder {//线程安全的ThreadLocalprivate static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();public static void setDbType(String dbType) {contextHolder.set(dbType);}public static String getDbType() {return ((String)contextHolder.get());}public static void clearDbType() {contextHolder.remove();}}

2. 代码 : DynamicDataSource

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extends AbstractRoutingDataSource {@Overridepublic Object determineCurrentLookupKey() {return  DbContextHolder.getDbType();}}

3.代码: spring.xml

<!-- 数据源属性配置文件 --><context:property-placeholder location="classpath:ibatis.properties" /><bean id="jksh" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"><!-- Connection Info --><property name="driverClassName" value="${driver.jksh}" /><property name="url" value="${url.jksh}" /><property name="username" value="${username.jksh}" /><property name="password" value="${password.jksh}" /><!-- Connection Pooling Info --><property name="maxIdle" value="${maxIdle.jksh}" /><property name="maxActive" value="${maxActive.jksh}" /><property name="defaultAutoCommit" value="false" /><property name="timeBetweenEvictionRunsMillis"value="${timeBetweenEvictionRunsMillis.jksh}" /><property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis.jksh}" /></bean><bean id="jclt" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"><!-- Connection Info --><property name="driverClassName" value="${driver.jclt}" /><property name="url" value="${url.jclt}" /><property name="username" value="${username.jclt}" /><property name="password" value="${password.jclt}" /><!-- Connection Pooling Info --><property name="maxIdle" value="${maxIdle.jclt}" /><property name="maxActive" value="${maxActive.jclt}" /><property name="defaultAutoCommit" value="false" /><property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis.jclt}" /><property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis.jclt}" /></bean><bean id="dataSource" class="com.jclt.service.commons.DynamicDataSource"><property name="targetDataSources"><map key-type="java.lang.String"><entry key="jksh" value-ref="jksh" /><entry key="jclt" value-ref="jclt" /></map></property><property name="defaultTargetDataSource" ref="jksh" /></bean>

4. 代码:main方法

import javax.sql.DataSource;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;import com.jclt.service.commons.DbContextHolder;
import com.jclt.service.model.User;import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;public class Text {/*** @param args*/public static void main(String[] args) {ApplicationContext appContext = new ClassPathXmlApplicationContext("client-beans.xml");DbContextHolder.setDbType("jclt");String res="src/main/resources/ibatis-config.xml";DataSource datasource=(DataSource) appContext.getBean("dataSource");SqlSessionFactoryBean bean=new SqlSessionFactoryBean();bean.setDataSource(datasource);Resource resource=new FileSystemResource(res);bean.setConfigLocation(resource);try {SqlSessionFactory sessionfactory = bean.getObject();SqlSession session=sessionfactory.openSession();User user=session.selectOne("com.jclt.service.Dao.readJKSH.findOne");System.out.println(user.getName());} catch (Exception e) {e.printStackTrace();}DbContextHolder.setDbType("jksh");String res1="src/main/resources/ibatis-config.xml";DataSource datasource1=(DataSource) appContext.getBean("dataSource");SqlSessionFactoryBean bean1=new SqlSessionFactoryBean();bean1.setDataSource(datasource1);Resource resource1=new FileSystemResource(res1);bean1.setConfigLocation(resource1);try {SqlSessionFactory sessionfactory = bean.getObject();SqlSession session=sessionfactory.openSession();User user=session.selectOne("com.jclt.service.Dao.readJKSH.findOne");System.out.println(user.getName());} catch (Exception e) {e.printStackTrace();}}}

posted on 2014-05-22 11:18 Alfa 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/wuyifu/p/3745234.html

spring+mybatis 多数据源切换相关推荐

  1. spring框架多数据源切换问题的解决

    Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性.而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时 ...

  2. hikari如何切换数据源_spring boot+mybatis 多数据源切换(实例讲解)

    由于公司业务划分了多个数据库,开发一个项目会同事调用多个库,经过学习我们采用了注解+aop的方式实现的 1.首先定义一个注解类 @Retention(RetentionPolicy.RUNTIME) ...

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

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

  4. spring boot+mybatis 多数据源切换

    由于公司业务划分了多个数据库,开发一个项目会同时调用多个库,经过学习我们采用了注解+aop的方式实现的 1.首先定义一个注解类 @Retention(RetentionPolicy.RUNTIME) ...

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

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

  6. spring boot微服务架构mybatis多数据源切换

    1,先看个目录结构图 可以看到,我把要设置的配置文件都放在了config文件夹下面 2,Application.java是程序启动项,里面必须设置 3,application.properties是多 ...

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

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

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

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

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

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

最新文章

  1. python读取excel数据并饼图_python生成excel表格以及饼图 示例源码
  2. Android中级篇之百度地图SDK v3.5.0-一步一步带你仿各大主流APP地图定位移动选址功能
  3. Linux下rz/sz安装及使用方法
  4. go给Linux安装mysql_在Linux上安装Go语言开发包
  5. go和python切片的不同
  6. 2020蓝桥杯省赛---java---B---5(排序)
  7. [机器学习笔记]Note8--机器学习应用建议
  8. android wifi 静态地址设置_安卓手机连接wifi故障的6种常见解决方法
  9. ADO.NET的最佳实践技巧
  10. 【OpenCV】矩阵掩模操作
  11. 基于tensorflow深度学习的中文的命名实体识别
  12. 神奇的G1——Java全新垃圾回收机制
  13. mysql怎么查看记录时间戳_mysql TIMESTAMP(时间戳)详解——查询最近一段时间操作的记录...
  14. 基于python的贪吃蛇游戏设计与实现
  15. 创建一个可以复制百度文库的Chrome插件
  16. VM 虚拟机 分辨率问题
  17. 7、什么是三极管(PNP与NPN型)恒流源电路(放电电路与充电电路)
  18. conda 解决An HTTP error occurred when trying to retrieve this URL.
  19. python打开摄像头黑屏怎么办_虚拟机ubuntu16下cheese打开摄像头黑屏问题
  20. css相对图片加文字,html+css怎么在图片上添加文字

热门文章

  1. 想要改变自己,请先突破这3个自我限制
  2. 处理器性能越来越强,但电脑为什么没有手机流畅?
  3. 指针用作函数参数、指针型函数和函数指针
  4. Qt4_Shreadsheet电子表应用
  5. Python学习代码
  6. sql 自定义函数 示例_SQL Server SESSION_CONTEXT()函数与示例
  7. 学习sql注入:猜测数据库_学习SQL:删除和更新数据SQL最佳实践
  8. Bootstrap框架(二)
  9. java Instrument修改字节码实现aop功能
  10. EasyUi各种消息框