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();
}
}
热门推荐
挑战《神秘复苏》:世界观的逻辑漏洞与改进建议
32寸电视机尺寸详解:屏幕大小、整体尺寸及安装建议
钱乙的六味地黄丸:千年传承的秘密
《中国中医药大会》推荐:六味地黄丸的临床应用与研究进展
六味地黄丸:你的冬季养生神器?
六味地黄丸:355年传承的养生良方,科学服用指南
在美国车被撞了对方全责,需及时报告保险公司并处理赔偿事宜
春季高发!儿童发烧后咳嗽的科学护理法
北京协和医院专家推荐:发烧后咳嗽患者的饮食调理指南
新冠感染后的咳嗽如何缓解?
朱敏院士团队重大发现:4.36亿年前古鱼揭示“从鱼到人”演化奥秘
抗美援朝:让你倍感振奋又热泪盈眶的16位“战斗英雄”
从微观视角看志愿军67军199师抗美援朝三年总的伤亡率
《神秘复苏》:在灵异世界中探寻人性与成长
揭秘:弓鳍鱼竟是人类祖先?
重庆发现4.36亿年前双叉苗家鱼化石,揭秘脊椎动物演化关键环节
金桔盆栽:打造你的吉祥小天地
金桔盆栽冬季养护秘籍:从防寒到浇水施肥全攻略
黄花菜是什么科的植物?黄花菜有哪些品种和营养价值?
降血脂的三味中药 轻松调节血脂 保护心血管健康
60岁女子得了高血脂,早晚吃胡萝卜,医生忠告:关键注意这几点!
千岛湖水基金:创新守护“一湖碧水”
千岛湖:以创新机制守护一湖碧水
千岛湖旅游打卡:梅峰揽胜与水上飞人
都灵电影节致敬白兰度:24部经典重现银幕
都灵电影节致敬白兰度:24部经典重现银幕
都灵电影节致敬白兰度:24部经典重现银幕
影响中药质量的五大因素
揭秘《雍正王朝》中的权谋风云
从乞丐到重臣:李卫的逆袭之路与清朝官场风云