Spring多数据源配置,这里持久层框架使用mybatis,集成Mybatis多数据源有两种方式:

1、创建多个SqlSessionFactory,扫描每个SqlSessionFactoryBean对应的包,形成了每个Factory对应一个数据源。

2、创建一个SqlSessionFactory,通过动态切换数据源对象,达到多数据源操作功能。

方式一:创建多个SqlSessionFactory

整合mysql+clickhouse双数据源

<!--mybatis + mysql + druid--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.23</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><!--clickhouse--><dependency><groupId>ru.yandex.clickhouse</groupId><artifactId>clickhouse-jdbc</artifactId><version>0.1.53</version></dependency>

jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.master.url=jdbc:mysql://localhost:3306/test
jdbc.master.username=root
jdbc.master.password=root
jdbc.master.maxActive=10
jdbc.master.minIdle=5
jdbc.master.maxWait=10000

clickhouse.properties

clickhouse.driverClassName=ru.yandex.clickhouse.ClickHouseDriver
clickhouse.url=jdbc:clickhouse://localhost:8123/test
clickhouse.username=root
clickhouse.password=root
clickhouse.maxActive=10
clickhouse.minIdle=5
clickhouse.maxWait=10000

spring配置文件中配置多个数据源

<!--加载mysql+clickhouse配置文件--><context:property-placeholder location="classpath:jdbc.properties"/><context:property-placeholder location="classpath:clickhouse.properties"/><!--=======================mysql数据源配置=======================--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.master.url}"/><property name="password" value="${jdbc.master.password}"/><property name="username" value="${jdbc.master.username}"/><property name="maxActive" value="${jdbc.master.maxActive}"/><property name="maxWait" value="${jdbc.master.maxWait}"/><property name="minIdle" value="${jdbc.master.minIdle}"/></bean><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="configLocation" value="classpath:mybatis-config.xml"/><property name="dataSource" ref="dataSource"/><property name="typeAliasesPackage" value="com.demo.flash.price.redpot.entity"/><property name="mapperLocations" value="classpath:mysql_mapper/*.xml"/><property name="plugins"><set><!--配置pageHelper 分页插件--><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><props><!--方言:--><prop key="helperDialect">mysql</prop></props></property></bean></set></property></bean><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.demo.flash.price.redpot.mapperMysql"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/></bean><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><tx:annotation-driven transaction-manager="transactionManager" /><!--=======================clickhouse数据源配置=======================--><bean id="dataSourceClickhouse" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${clickhouse.driverClassName}"/><property name="url" value="${clickhouse.url}"/><property name="password" value="${clickhouse.password}"/><property name="username" value="${clickhouse.username}"/><property name="maxActive" value="${clickhouse.maxActive}"/><property name="maxWait" value="${clickhouse.maxWait}"/><property name="minIdle" value="${clickhouse.minIdle}"/></bean><bean id="sqlSessionFactoryClickhouse" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="configLocation" value="classpath:mybatis-config.xml"/><property name="dataSource" ref="dataSourceClickhouse"/><property name="typeAliasesPackage" value="com.demo.flash.price.redpot.entity"/><property name="mapperLocations" value="classpath:clickhouse_mapper/*.xml"/><property name="plugins"><set><!--配置pageHelper 分页插件--><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><props><!--方言:--><prop key="helperDialect">mysql</prop></props></property></bean></set></property></bean><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.demo.flash.price.redpot.mapperClickhouse"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryClickhouse"/></bean><bean id="transactionManagerClickhouse"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSourceClickhouse"></property></bean><tx:annotation-driven transaction-manager="transactionManagerClickhouse" />

方式二:动态切换数据源对象

创建单个SqlSessionFactory,动态切换数据源对象 ,在Spring的jdbc包下有个支持动态数据源切换的抽象类AbstractRoutingDataSource,其中的抽象方法determineCurrentLookupKey需要我们自己来实现,到底返回哪个数据源

public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {//在这里做数据源切换return DataSourceTypeManager.get();}}
public class DataSourceTypeManager {//数据源保存private static final ThreadLocal<MybatisDataSource> dataSourceTypes = new ThreadLocal<MybatisDataSource>() {@Overrideprotected MybatisDataSource initialValue() {return MybatisDataSource.JKDSJ;}};public static MybatisDataSource get() {return dataSourceTypes.get();}public static void set(MybatisDataSource dataSourceType) {dataSourceTypes.set(dataSourceType);}public static void reset() {dataSourceTypes.set(MybatisDataSource.JKDSJ);}}

【SpringBoot DB 系列】Mybatis 基于 AbstractRoutingDataSource 与 AOP 实现多数据源切换_一灰灰blog的博客-CSDN博客

Spring多数据源配置相关推荐

  1. Spring多数据源配置和使用

    Spring多数据源配置和使用 1.配置信息 <!--==============================bpt_mobdb数据库配置========================== ...

  2. spring(16)------spring的数据源配置

    spring(16)------spring的数据源配置 在spring中,通过XML的形式实现数据源的注入有三种形式. 一.使用spring自带的DriverManagerDataSource 使用 ...

  3. 搭建eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo

    前言:我这里搭建好eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo.新手快速上手直接看demo. 最后处提供完整高质量de ...

  4. java spring多数据源配置文件_深入理解spring多数据源配置

    项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此.多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源.例如在一个spring和hibernate的框架的 ...

  5. Spring自定义数据源配置不当引起的Mybatis拦截器Interceptors 失效/不生效

    目录 内容 Interceptor接口与@Intercepts注解 PageHelper实现拦截器 默认数据源与拦截器 自定义数据源与拦截器的问题 自定义数据源注入拦截器 内容 Interceptor ...

  6. Spring多数据源配置以及动态切换实现

    Spring多数据源配置以及动态切换实现 问题描述 一:首先是配置数据源 1.使用xml的bean节点来配置 2.使用yml配置+java代码实现配置 二:动态数据源 三:使用AOP切面实现动态数据源 ...

  7. Spring 多数据源配置详解

    前言 数据源是 JDBC 规范中用来获取关系型数据库连接的一个接口,主要通过池化技术来复用连接. 简单点的 Java 项目或者拆分比较彻底的微服务模块中只会用到一个数据库实例,对应一个数据源.稍复杂点 ...

  8. Spring笔记——数据源配置

    常见的数据源(连接池)包括:DBCP.C3P0.BoneCP.Druid等接下来以C3P0为例讲述一下spring配置数据源的过程数据源的开发步骤 ①导入数据源的坐标和数据库驱动坐标 ②设置数据源的基 ...

  9. Spring 多数据源 @Transactional 注解事务管理

    在 Spring,MyBatis 下两个数据源,通过 @Transactional 注解 配置简单的事务管理 spring-mybatis.xml <!--******************* ...

最新文章

  1. Redisson实现Redis分布式锁的N种姿势
  2. Open-E DSS V7 应用系列之三 Web管理简介
  3. Python3 CookBook | 数字处理
  4. 金三银四的腾讯、阿里、​字节等大厂前端社招面经
  5. Inside Kolla - 04 Kolla 目录结构
  6. Manuscript match— 找到最适合你文章的那个ta(之期刊杂志)
  7. 番茄瑜伽13招-学好可以疏经活血祛风止痛
  8. Chrome安装Vue.js devtool 4.1.4_0
  9. 从源码解析 Spring JDBC 异常抽象
  10. [计算机网络]RJ45直通线和交叉线的连接方式和设备类型解析
  11. 联想微型计算机怎么连接电源,终于认识联想电脑主板与机箱电源安装方法
  12. python提取文件指定列_python 提取文件指定列的方法示例
  13. 单向流动的拓扑结构_六种基本网络拓扑结构
  14. Exp4 恶意代码分析 20154301仉鑫烨
  15. 【2017年总结】--吾生也有涯,而知也无涯
  16. mac os 录屏快捷键_Mac录屏软件集合,自带不够专业来凑
  17. Linux Ubuntu系统设置成中文语言
  18. 清华-计算机-考研-精华帖-汇总
  19. Introduction to Computer Networking学习笔记(十五):Queue Model 包交换中的缓冲模型
  20. Linux基础笔记11 | 链接文件详解

热门文章

  1. 一台电脑两个网卡接入两个网络
  2. 华硕灵耀X双屏怎么样?华硕灵耀x2双屏缺点?详细性能评测
  3. 编程中保护眼睛的颜色
  4. 写一个体验良好的git commit
  5. vue3使用echarts并封装echarts组件
  6. Mac m1使用UTM安装win11
  7. 抓取5W数据,解密「原价收+1.5折卖」的二手书小程序
  8. 电脑的ODBC数据源里面没有Microsoft Access Driver(*.mdb),并且已经装上了microsoft office 2003
  9. 服务器备案的网站名称怎么填写,公安备案网站名称怎么写?
  10. Qt开发高级进阶: WebCamera(UVC)摄像头使用QAbstractVideoSurface捕获视频帧到QImage