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();
}
}
热门推荐
烧烤无烟净化器安装图详解:从选购到维护的全流程指南
12321投诉暴力催收可以吗?不止有12321,还有这7个渠道同样给力
一文详解:子女、儿媳和继子女的赡养义务
珠海东澳岛两日游攻略
如何有效给文件夹加密以保护隐私和数据安全的方法与技巧
如何使目光变得坚毅?练就坚毅眼神:四个步骤塑造你的自信目光!
打造全国领先的合成生物标杆城市 杭州怎么做?
案件受理费如何计算
账号不火?五个实用小红书运营心得,助你引爆流量!
如何在了解房产情况时做出准确分析?这种分析如何反映实际状况?
世界睡眠日|选择适宜光照,拥有良好睡眠
钻戒保值与回收价值全解析:影响因素与购买建议
B型钠尿肽从35000降到15000代表什么
写实文学:现实主义与自然主义的文学思潮与创作方法
八字命理分析,避免预测误差
[MySQL实战] 如何定义唯一约束(唯一索引)
《怪物猎人荒野》轻重弩优缺点分析
如何进行房产的合理过户操作?这类操作需要注意哪些事项?
生活在水里的鱼,也会被水“淹死”,这是为什么?
脑脊液在哪里抽取
提升孩子自信心的五个简单方法
奥飞娱乐:预计2024年亏损2.4亿元-2.9亿元
如何评估笔记本电脑的性价比配置?(选择笔记本电脑时需要注意的关键配置指标)
孕期饮食指南:红参果的营养价值与食用注意事项
报的旅游团突然有事去不了怎么退款
Windows 10/11用户必看:如何关闭系统自动更新
咳嗽不能乱用药,不同情况的选药攻略分享给您
北京海庆律师事务所解读---看电影拍照发圈,真的会违法吗?
HDMapNet 模型详解:端到端高精地图构建的创新之路
11个经典运放电路