Spring Boot 实现数据源动态切换的最佳姿势!
创作时间:
作者:
@小白创作中心
Spring Boot 实现数据源动态切换的最佳姿势!
引用
CSDN
1.
https://blog.csdn.net/weixin_45334346/article/details/145460785
在Spring Boot项目中,有时需要根据不同的业务场景切换不同的数据源。本文将详细介绍如何实现数据源的动态切换,包括数据库准备、工程环境配置以及动态数据源的具体实现方法。
2.1、数据库准备
首先,我们需要创建两个数据库:
- db_test_1
- db_test_2
在db_test_1数据库中创建一张用户表,脚本如下:
在db_test_2数据库中创建另一张账户表,脚本如下:
2.2、工程环境准备
在pom.xml文件中添加相关的依赖包,示例如下:
<!--spring boot核心-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--spring boot 测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--mysql 驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!--aspectj 注解代理-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
2.3、编写动态数据源
2.3.1、创建动态数据源服务类
首先,创建一个DynamicDataSource类,并继承AbstractRoutingDataSource抽象类,同时重写determineCurrentLookupKey()方法,代码示例如下:
2.3.2、创建动态数据源缓存类
创建一个DataSourceContextHolder类,用于缓存数据源,同时需要确保线程环境下安全
package com.example.dynamic.datasource.config;
public class DataSourceContextHolder {
/**
* 设置线程独立变量,用于存储数据源唯一标记
*/
private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
public static void setDataSourceKey(String key) {
contextHolder.set(key);
}
public static String getDataSourceKey() {
return contextHolder.get();
}
public static void clearDataSourceKey() {
contextHolder.remove();
}
}
热门推荐
骨科医生教你预防颈椎突出:调整习惯+4种锻炼法
武汉幼儿园现诺如病毒感染,专家解读症状与防护指南
科学家呼吁开展新任务研究太阳
丝绸羊毛如何洗?专业护理让衣物保持如新
丝质衬衫搭配指南:从职场到度假的全方位穿搭术
征地补偿费分配指南:三大费用如何合理分配
春运安检新规:充电宝超100瓦时禁带,自热锅全面禁运
1月1日起乘火车限带酒类:散装酒禁带,瓶装酒限3000毫升
铁路新规:春运期间白酒限带3000毫升,散装酒禁带
古风伤感ID,凝结千年悲欢离合
黛玉的古风伤感ID:从文学经典到网络流行
“一生残梦”:一个古风伤感网名的诗意解读
健康吃烧烤:食材搭配与安全指南,告别重油重盐享美味
猫咪户外探险指南:七大要点保平安
猫咪户外探险指南:安全带猫遛弯儿
上海机场联络线南站支线启动,中铁四院中标方案研究
报复性晚睡后,如何优雅起床?
早晨同步昼夜节律,告别报复性起床
年终工作总结,这些语言技巧让你脱颖而出
李小冉8.3亿北京别墅曝光:欧式城堡里的“御花园”
李小冉200平米玫瑰花园曝光,海淀豪宅尽显生活品质
宠物狗肾病防治指南:5大原因、10种症状早知道
颈椎病与精神紧张焦虑的恶性循环:如何打破?
颈椎病康复新招,专家教你几招缓解症状
北京中医药大学东方医院推荐:颈部操预防颈椎病
工信部启动万兆光网试点,网速提升10倍助推数字化转型
特种光纤突破传统限制,为5G、AI提供高性能传输方案
常州“龙城”考:六千年龙文化传承与演变
从饮食到运动:科学喂养让狗狗更健康长寿
博物馆有看头|一道圣旨镌刻两代“帝王心”