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();
}
}
热门推荐
DeepSeek爆火背后:AI能力边界的探讨
方笑一:苏轼诗歌的文化内涵与艺术趣味
移动端登录页设计指南:8个关键要素助你打造完美登录体验
深夜思乡:如何调适这种复杂的情感?
《遮天》和《仙逆》,谁是你心中的东方玄幻顶流?
朱棣八字揭秘:命运逆袭的秘密
怎么判断汤圆坏了
一文详解肤色不均:原因剖析与专业建议
《末日前线》揭秘丧尸角色创意来源
七夕来了!这些小技巧让你的家庭生活更有爱💕
宠物美容师有前途吗?985毕业生逃离大厂,一年半月入过万
布林线指标(BOLL)的全面解析与实战应用
熬夜党福音:生熟地龙骨汤的制作与功效详解
Excel高级公式与函数应用指南
107家券商2024年分类评价出炉!九大加分项、五大扣分点 旨在突出机构功能性
恒飞实验中学:信息技术引领教育创新的先行者
中华医学会发布最新指南:搏动性耳鸣的影像学诊断标准
《Apex英雄》全人物图鉴 英雄背景与技能介绍
紫外线 (UV) 辐射:类型、危害与防护指南
流年星象与我们的爱情:宇宙能量如何影响情感生活
十二生肖幸运数字、幸运色各是什么?有何讲究?
用PREP法则提升职场沟通力,让表达更有说服力
增肌饮食指南:从早餐到训练后的科学进餐法则
新腕儿&WETRUE解压短剧榜出炉!《再见不说三次》登顶,三部佳作各具特色
如何预防未成年人沉迷网络?
会游泳就不会溺水?戴游泳圈就能保命?真相是……
书法爱好者必看:野字笔画技巧大揭秘!
证券投资基础:入门指南与核心原则
理想与现实的撕裂:《Fate/Zero》中卫宫切嗣的角色解析
郑州到二连浩特摩托车骑行攻略:这些装备让你一路无忧