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();
}
}
热门推荐
文学名著改编电视剧:保留精髓与创新表达的艺术
烘焙师冯一朵:用创意蛋糕复刻国宝,让传统点心焕发新生
学习《幼儿园教师专业标准》心得
CityWalk,这就是街口|漫游流溪河畔,感受从化街口生态之美
冬季眩晕高发,专家推荐眩晕宁颗粒配合5大预防措施
研究证实:积极心态让人更幸福健康,这里有5种培养方法
探秘“江北第一溶洞”:鲁山溶洞群的地质奇观与文化魅力
万能猪肉馅料配方:一招搞定包子饺子,想加啥菜就加啥菜
X79主板与Xeon E5-2600系列:服务器领域的黄金搭档
薪资核算暗藏风险,六大措施助力企业合规管理
江门石板沙村:一日游完全攻略
石板沙村:岭南水乡里的疍家文化瑰宝
镜泊湖旅游攻略:65岁老人坚持42年悬崖跳水,四大景点详解
镜泊湖:吊水楼瀑布跳水表演与地下森林奇观
高血压患者如何抵制酒精诱惑
最新研究揭示:生酮饮食影响代谢和肠道菌群,低糖饮食更优
杭州高新区34年:跨江发展孕育72家上市公司
全国首个侨创小镇在温州:一年吸引千余名海归人才
增强健康管理 投资健康人生
“拔火罐”到底在“拔”什么?
“十字面包征”等影像特征提升帕金森病诊断准确性
港大团队研发低成本MRI:深度学习提升超低场影像质量
香雪兰叶尖发黄怎么办?15个原因分析与解决方法
膀胱过度活动症可防可治,专家推荐这些实用治疗方法
研究发现:轻断食影响头发生长,这些食物来补救
如何设计一款爆红的茉莉花茶宣传图?
官渡之战:曹操击败袁绍,打破豪强垄断
兖州之战:袁绍错失良机,曹操迎来转机
从黄巾之乱到三国归晋:东汉末年到西晋统一的历史演进
安史之乱:唐朝国运转折与文明进程的重塑