spring boot druid mybatis多数据源
一、关闭数据源自动配置(很关键)
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
如果不关闭会报异常:org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'dataSource': Requested bean is currently in creation: Is there an unresolvable circular reference?
ps:之前一直没折腾成功,竟然就是少了这一个配置,泪奔
二、配置文件
spring.datasource.druid.one.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.one.url=
spring.datasource.druid.one.username=
spring.datasource.druid.one.password= spring.datasource.druid.two.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.two.url=
spring.datasource.druid.two.username=
spring.datasource.druid.two.password=
三、数据源定义
@Bean
@ConfigurationProperties("spring.datasource.druid.one")
public DataSource dataSource1() throws Exception {
return DruidDataSourceBuilder.create().build();
} @Bean
@ConfigurationProperties("spring.datasource.druid.two")
public DataSource dataSource2() throws Exception {
return DruidDataSourceBuilder.create().build();
}
四、多数据类定义
package com.qmtt.config;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DynamicDataSourceHolder.getDataSourceKey();
}
}
五、ThreadLocal定义
package com.qmtt.config; import java.util.HashSet;
import java.util.Set; public class DynamicDataSourceHolder { private static final ThreadLocal<String> dataSourceThreadLocal = new ThreadLocal<String>(); private static Set<String> dataSourceKeys = new HashSet<String>(); static {
dataSourceKeys.add("master");
dataSourceKeys.add("slave");
} public static void setDataSourceKey(String dataSourceKey) {
dataSourceThreadLocal.set(dataSourceKey);
} public static String getDataSourceKey() {
return dataSourceThreadLocal.get();
} public static void clearDataSourceKey() {
dataSourceThreadLocal.remove();
} public static boolean containsDataSourceKey(String dataSourceKey) {
return dataSourceKeys.contains(dataSourceKey);
}
}
六、数据源定义
@Bean
public DataSource dataSource(@Qualifier("dataSource1") DataSource dataSource1,
@Qualifier("dataSource2") DataSource dataSource2) throws Exception {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
// 创建默认数据源
dynamicDataSource.setDefaultTargetDataSource(dataSource1());
// 配置多数据源
Map<Object, Object> dataSourceMap = new HashMap<>(4);
dataSourceMap.put("master", dataSource1);
dataSourceMap.put("slave", dataSource2);
dynamicDataSource.setTargetDataSources(dataSourceMap);
return dynamicDataSource;
}
七、SqlSessionFactory定义
常规写法
八、AOP切换
Aspect拦截dao就行
第一步很关键
spring boot druid mybatis多数据源的更多相关文章
- spring boot + druid + mybatis + atomikos 多数据源配置 并支持分布式事务
文章目录 一.综述 1.1 项目说明 1.2 项目结构 二.配置多数据源并支持分布式事务 2.1 导入基本依赖 2.2 在yml中配置多数据源信息 2.3 进行多数据源的配置 三.整合结果测试 3.1 ...
- Spring boot 与mybatis 多数据源问题
https://www.cnblogs.com/ityouknow/p/6102399.html Spring Boot 集成Mybatis实现多数据源 https://blog.csdn.net/m ...
- Spring Boot集成Mybatis双数据源
这里用到了Spring Boot + Mybatis + DynamicDataSource配置动态双数据源,可以动态切换数据源实现数据库的读写分离. 添加依赖 加入Mybatis启动器,这里添加了D ...
- spring boot(七)mybatis多数据源解决方案
说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务.我们项目是后者的模式,网上找了很多,大都是根据jpa来做多数据源解决方案,要不就是老的spring多数据源解 ...
- Spring Boot 整合 Mybatis 实现 Druid 多数据源详解
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “清醒时做事,糊涂时跑步,大怒时睡觉,独处时思考” 本文提纲一.多数据源的应用场景二.运行 sp ...
- Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源
本文是 Spring Boot 整合数据持久化方案的最后一篇,主要和大伙来聊聊 Spring Boot 整合 Jpa 多数据源问题.在 Spring Boot 整合JbdcTemplate 多数据源. ...
- Spring Boot + Druid 多数据源绑定
date: 2019-12-19 14:40:00 updated: 2019-12-19 15:10:00 Spring Boot + Druid 多数据源绑定 版本环境:Spring Boot 2 ...
- 太妙了!Spring boot 整合 Mybatis Druid,还能配置监控?
Spring boot 整合 Mybatis Druid并配置监控 添加依赖 <!--druid--> <dependency> <groupId>com.alib ...
- Spring Boot 2.x 多数据源配置之 MyBatis 篇
场景假设:现有电商业务,商品和库存分别放在不同的库 配置数据库连接 app: datasource: first: driver-class-name: com.mysql.cj.jdbc.Drive ...
随机推荐
- 使用a标签下载文件,而不是直接打开,使用属性 download
有的时候,下载的链接文件如果是普通文件类型,如txt,我们下载文件的时候,有的浏览器不会弹出下载框,.而是直接打开了该文件. 针对这种情况,我们只需要在a标签上加上download属性即可显示下载框. ...
- git format-patch 用法
git format-patch HEAD^ # git format-patch -s 1bbe3c8c197a35f79bfddaba099270a2e54ea9c7 please replace ...
- caioj1462: 【EXKMP】回文串
不得不说这是一道好题(前排膜拜灯教授),其实这道题如果不说是EXKMP,很容易就想到Manacher(好像也可以这样做) 回到这道题,这样只有一个字符串,还要求回文?立刻想到了将这个串和它的反串跑EX ...
- 使用JavaScript访问XML数据
在本篇文章中,我们将讲述如何在IE中使用ActiveX功能来访问并解析XML文档,由此允许网络冲浪者操纵它们.这一网页将传入并运行脚本的初始化.你一定确保order.xml文档与jsxml.html在 ...
- hdu-2680 Choose the best route(最短路)
题目链接: Choose the best route Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- MyBatis学习 之 五、MyBatis配置文件
在定义sqlSessionFactory时需要指定MyBatis主配置文件: <bean id="sqlSessionFactory" class="org.myb ...
- Name That Number
链接 分析:找出每一个字母对应的数字,然后看字典里面那个与其匹配 /* ID: **** PROG: namenum LANG: C++ */ #include<iostream> #in ...
- Struts2 关于返回type="chain"的用法.
1.转自:https://blog.csdn.net/wuye/article/details/73274852 功能与redirect的action转发类似,不过与redirectaction转 ...
- (水题)洛谷 - P1478 - 陶陶摘苹果(升级版)
https://www.luogu.org/problemnew/show/P1478 没啥好说的…… 居然还漏写一个等于号WA了一发. #include<bits/stdc++.h> u ...
- C++开发工程师面试题库 100~150道
101. 编写strcat函数(6分) 已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc); 其中strDest 是目的字符串 ...