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();
}
}
热门推荐
中医四季食疗,让你脾胃全年无忧
车辆开锅怎么办?这些技巧让你不再慌乱
瑜伽改善肺功能有科学依据,深呼吸与体位练习双管齐下
维拉主场迎战莱切城:谁能打破连败魔咒?
法院立案庭职能详解:把好司法程序“入口关”
野钓大赛冠军教你选鱼钩:不同类型鱼的鱼钩选择指南
特效精美,立意深刻:《与凤行》成仙侠剧新标杆
电商企业如何有效应对高退货率挑战,提升客户满意度?
6招解决头屑!居家疗法简单自己来
秋冬滋补必备:鹿茸片炖汤大集合
三国西凉现在什么地方?
奶制品、豆制品、肉蛋类,提升白细胞的秘密武器
寻味安阳:岳飞庙景区游览与冬日雪景三日游攻略
石斛怎么种植方法视频,石斛怎么种植 家养
雪菊的营养价值和养生功效,每天泡几朵最佳
揭秘天山雪莲:生态守护者的使命
冬季养胃三宝:羊肉、红枣、生姜
蒸馏法分离水和甘油:原理与操作指南
吕布影视形象大盘点:张光北经典,黄海冰版最令人期待
伊普斯维奇vs切尔西:冬歇期后的对决,谁将笑到最后?
黄圣依夸杨子演技“拿奖级别”,网友热议真伪
马嘉祺名字背后的美好寓意
马嘉祺巧用PY-GEC技术攻克普通话发音难关
米醋储存有讲究:常温避光密封,四招保持最佳风味
多功能食品安全检测仪:餐饮安全的“透视眼”
甲状腺结节钙化是什么?会引起癌变吗?
从选择软件到分享作品:一文掌握电脑绘画全流程
拜新同正确服药指南,高血压患者的福音
当心“伪全麦”!教你做出真正健康的全麦面包
电气设计 | 工作接地、保护接地、保护接零和重复接地