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();
}
}
热门推荐
285家药企研发投入公布,创新实力PK(附excel下载)
路由器替代交换机使用技巧揭秘
钟姓的历史起源与演变
樟脑对婴儿有影响吗
工伤耳聋属于几级
中年女教师课堂突发脑梗,介入手术按下“生命重启键”
一招治打嗝
Minecraft插件开发概述:如何实现创意模组设计
北斗,不止导航这么简单
脚腕酸痛什么引起的原因
诗经《木瓜》的赏析
每天狂炫草莓,30天后我竟然变成了……
新型债务重组助力重债穷国走出恶性循环
鲁滨逊在荒岛上遇到哪些困难?荒岛求生:鲁滨逊遭遇哪些惊险挑战?!
Blender 4.0流体模拟入门:从基础设置到最终渲染
公司法人与股东的责任承担是不是一样的
不走寻常路的安达卢西亚,解锁世界遗产的小众路线
使用帕金森病药物效果减弱应如何处理
设备维修的效率
图说古埃及:第二中间期
创意设计类Mod使用与效果提升在Minecraft中的必要性
历朝历代都是怎么评价唐太宗李世民的?
霰粒肿手术过程详解
病毒性心肌炎:认识、预防与应对
我国垃圾焚烧行业发展现状及未来预测
“巨额财产下落不明”,广州资产对广东振戎的破产申请被驳回
周末投稿容易被拒!这篇论文告诉你投稿真的要挑黄道吉日!
借车免责协议:明确责任,保障权益
吉训明院士团队首次提出并证实“可降解神经保护支架”理念
农村这3种野草能做甜酒曲,又香又甜还不上头,目前正适合做,别错过