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();}}}
转载于:https://www.cnblogs.com/wuyifu/p/3745234.html
spring+mybatis 多数据源切换相关推荐
- spring框架多数据源切换问题的解决
Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性.而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时 ...
- hikari如何切换数据源_spring boot+mybatis 多数据源切换(实例讲解)
由于公司业务划分了多个数据库,开发一个项目会同事调用多个库,经过学习我们采用了注解+aop的方式实现的 1.首先定义一个注解类 @Retention(RetentionPolicy.RUNTIME) ...
- spring mybatis 多数据源配置 jeesite 多数据源配置
spring mybatis 多数据源配置 jeesite 多数据源配置 一.情景描述 在系统数据达到一定的访问量时,遇到单个数据库瓶颈,所以需要扩展数据库,启用第二个数据源资源,项目架构变成 一个服 ...
- spring boot+mybatis 多数据源切换
由于公司业务划分了多个数据库,开发一个项目会同时调用多个库,经过学习我们采用了注解+aop的方式实现的 1.首先定义一个注解类 @Retention(RetentionPolicy.RUNTIME) ...
- Spring+Mybatis多数据源配置(一)——MySQL与Oracle通过配置切换
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- spring boot微服务架构mybatis多数据源切换
1,先看个目录结构图 可以看到,我把要设置的配置文件都放在了config文件夹下面 2,Application.java是程序启动项,里面必须设置 3,application.properties是多 ...
- Spring+MyBatis多数据源配置实现
最近用到了MyBatis配置多数据源,原以为简单配置下就行了,实际操作后发现还是要费些事的,这里记录下,以作备忘 不多废话,直接上代码,后面会有简单的实现介绍 jdbc和log4j的配置 #定义输出格 ...
- Spring+MyBatis 多数据源配置和切换
两台 MySQL 数据库(属于 master-slave 主从关系),基于 Java8,Spring4,MyBatis3.2 环境. maven 依赖配置 <dependencies>&l ...
- Spring+Mybatis多数据源配置(四)——AbstractRoutingDataSource实现数据源动态切换
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
最新文章
- python读取excel数据并饼图_python生成excel表格以及饼图 示例源码
- Android中级篇之百度地图SDK v3.5.0-一步一步带你仿各大主流APP地图定位移动选址功能
- Linux下rz/sz安装及使用方法
- go给Linux安装mysql_在Linux上安装Go语言开发包
- go和python切片的不同
- 2020蓝桥杯省赛---java---B---5(排序)
- [机器学习笔记]Note8--机器学习应用建议
- android wifi 静态地址设置_安卓手机连接wifi故障的6种常见解决方法
- ADO.NET的最佳实践技巧
- 【OpenCV】矩阵掩模操作
- 基于tensorflow深度学习的中文的命名实体识别
- 神奇的G1——Java全新垃圾回收机制
- mysql怎么查看记录时间戳_mysql TIMESTAMP(时间戳)详解——查询最近一段时间操作的记录...
- 基于python的贪吃蛇游戏设计与实现
- 创建一个可以复制百度文库的Chrome插件
- VM 虚拟机 分辨率问题
- 7、什么是三极管(PNP与NPN型)恒流源电路(放电电路与充电电路)
- conda 解决An HTTP error occurred when trying to retrieve this URL.
- python打开摄像头黑屏怎么办_虚拟机ubuntu16下cheese打开摄像头黑屏问题
- css相对图片加文字,html+css怎么在图片上添加文字