当前位置: 首页 > news >正文

Spring Boot 3.x 使用多数据源动态切换为何必须用 dynamic-datasource-spring-boot3-starter

🚀 Spring Boot 3.x 使用多数据源动态切换为何必须用 dynamic-datasource-spring-boot3-starter?


📝 一、问题描述

升级 Spring Boot 到 3.x 后,很多使用了 dynamic-datasource-spring-boot-starter(原版)项目启动失败,出现如下错误:
在这里插入图片描述


Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class

导致项目无法正常启动。


🔍 二、错误原因分析

1️⃣ Spring Boot 3.x 的变化

Spring Boot 3 基于 Jakarta EE 9 规范,底层依赖从 javax.* 包迁移到了 jakarta.* 包:

  • 原先使用 javax.sql.DataSource 等相关类被迁移为 jakarta.sql.DataSource
  • Spring Framework、Spring Boot、相关依赖均完成了向 jakarta 的迁移。

2️⃣ dynamic-datasource-spring-boot-starter 不兼容问题

  • 该 starter 的 4.x 版本主要支持 Spring Boot 2.x,依赖 javax 包。
  • 在 Spring Boot 3.x(Spring Framework 6)环境中,由于 javax 包被移除,导致其内部涉及数据源代理、路由等类无法正确装配。
  • 这会导致 Spring Boot 在自动配置时找不到合适的 DataSource 驱动和配置,从而抛出“url attribute is not specified”错误。

✅ 三、解决方案:使用 dynamic-datasource-spring-boot3-starter

为了适配 Spring Boot 3.x,作者团队发布了专门的 starter:

<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot3-starter</artifactId><version>4.3.0</version>
</dependency>

特点:

  • 完全基于 Jakarta EE 9 规范,兼容 Spring Boot 3.x 和 Spring Framework 6。
  • 重写了依赖注入和数据源路由相关代码,支持最新的数据源接口。
  • 保持原有 API 和配置兼容,升级门槛低。

🛠 四、如何切换到 Spring Boot 3.x 的动态数据源

1. 修改依赖

将旧版本:

<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>4.3.0</version>
</dependency>

替换为:

<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot3-starter</artifactId><version>4.3.0</version>
</dependency>

2. 保持配置文件不变

application.yml 中数据源配置可保持一致:

spring:datasource:dynamic:primary: masterdatasource:master:url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTCusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverslave:url: jdbc:mysql://localhost:3307/test?useSSL=false&serverTimezone=UTCusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver

3. 其他代码基本无需修改


🔎 五、源码分析与官方说明

1. 官方源码仓库

dynamic-datasource-spring-boot-starter 项目托管在 GitHub:

👉 https://github.com/baomidou/dynamic-datasource-spring-boot-starter

2. 版本支持与分支结构

  • master 分支 主要支持 Spring Boot 2.x,基于 javax.* 依赖。
  • springboot3 分支 专门适配 Spring Boot 3.x,依赖迁移至 jakarta.*,修复包名变更导致的兼容性问题。

3. 官方 README 中的升级提示

在这里插入图片描述

在 README 中明确提到:

For Spring Boot 3.x users, please use the dynamic-datasource-spring-boot3-starter artifact, which is fully compatible with Jakarta EE 9 and Spring Framework 6.

4. 依赖差异对比

依赖包名称依赖包版本适用 Spring Boot 版本依赖包命名空间
dynamic-datasource-spring-boot-starter4.x (master分支)Spring Boot 2.xjavax.*
dynamic-datasource-spring-boot3-starter4.x (springboot3分支)Spring Boot 3.xjakarta.*

5. 关键代码变化示例

// Spring Boot 2.x 版示例,依赖 javax.sql.DataSource
import javax.sql.DataSource;// Spring Boot 3.x 版示例,依赖 jakarta.sql.DataSource
import jakarta.sql.DataSource;

由于底层包名变更,若使用老版本 starter 在 Spring Boot 3.x 环境中会导致自动装配失败。


🧾 六、总结

版本依赖包名称适用 Spring Boot 版本
🟢 旧版dynamic-datasource-spring-boot-starterSpring Boot 2.x
🔵 新版dynamic-datasource-spring-boot3-starterSpring Boot 3.x

升级 Spring Boot 3.x 后,一定要切换到 -spring-boot3-starter 版本,否则会因为包兼容性导致启动失败。


🔗 七、参考链接

  • dynamic-datasource 官方 GitHub
  • Spring Boot 3 升级指南
  • Jakarta EE 9 包迁移说明

⭐ 如果觉得本文对你有帮助,欢迎点赞和收藏!

http://www.dtcms.com/a/308726.html

相关文章:

  • 第13届蓝桥杯C++青少组中/高级组选拔赛2022年1月22日真题
  • visual studio 安装总结
  • 笔试——Day24
  • Faker虚假数据生成功能
  • 使用ANSYS Fluent和群体平衡模型对搅拌罐反应器中的气泡动力学进行建模
  • 运作管理学习笔记1-运作管理基础
  • 八、Vue前端项目案例关键过程记录
  • Redis高频问题全解析
  • NFLSOI 7.25 题解
  • 2025电赛e题:openmv识别过程丢失矩形
  • 第三十篇:AI的“思考引擎”:神经网络、损失与优化器的核心机制【总结前面2】
  • 项目推进难的原因有哪些?问题及应对
  • 汇编语言中的溢出(Overflow)与下溢(Underflow)
  • 03-Redis哨兵集群实现
  • 新手教程:用外部 PostgreSQL 和 Zookeeper 启动 Dolphinscheduler
  • 8.1-使用向量存储值列表
  • 2025年蓝桥杯青少图形化编程国考真题——摆放玩具
  • 大语言模型信息抽取系统解析
  • [12月考试] B
  • MySQL中join联表的原理
  • 前端基础之《Vue(28)—Vue3 ref相关API》
  • web应用从服务器主动推动数据到客户端的方式
  • Windows 11下IDEA中使用git突然变得卡慢及解决办法
  • Spring-rabbit使用实战五
  • 生信软件49 - 全基因组亚硫酸氢盐测序(WGBS)比对与甲基化水平调用工具BSseeker2
  • Linux 进程管理与计划任务
  • 代码随想录算法训练营第五十七天|图论part7
  • 物联网与AI深度融合,赋能企业多样化物联需求
  • Unity插件——Simple Waypoint System的使用总结
  • Apifox 7 月更新|通过 AI 命名参数及检测接口规范、在线文档支持自定义 CSS 和 JavaScript、鉴权能力升级