Spring Boot整合Druid与Dynamic-Datasource多数据源安装:从错误到完美解决

本文记录在Spring Boot 2.X项目中整合Druid连接池和Dynamic-Datasource多数据源时遇到的典型错误DataSource returned null from getConnection()的完整解决过程,包含详细的错误分析和解决方案。

问题背景

在Spring Boot 2.7项目中,我需要整合:

  • Druid:阿里开源的数据库连接池,提供强大的监控功能
  • Dynamic-Datasource:基于MyBatis-Plus的多数据源组件

配置完成后启动项目,出现以下关键错误日志:

SqlSession [...] was not registered for synchronization because synchronization is not active
13:46:49.312 WARN c.alibaba.druid.pool.DruidDataSource [1144]
- getConnection but jdbcUrl is not set,jdbcUrl=null,username=null
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException:
Failed to obtain JDBC Connection: DataSource returned null from getConnection(
): {

CreateTime:"2025-06-03 13:46:41",
ActiveCount:0,
PoolingCount:0,
CreateCount:0,
DestroyCount:0,
CloseCount:0,
ConnectCount:0,
Connections:[]
}

错误原因深度分析

1. 数据源初始化失败

  • 连接池状态显示所有计数为0,表明数据源未正确初始化
  • Druid报出jdbcUrl is not set,说明关键连接参数未注入

2. 配置冲突(核心原因)

  • Druid自动配置Dynamic-Datasource自动配置 冲突
  • 手动创建的DataSource Bean覆盖了动态数据源配置

3. 连接池冲突

  • Spring Boot默认使用HikariCP连接池
  • 未排除HikariCP导致连接池实现冲突

4. 多数据源配置问题

  • @DS注解指定的数据源名称与配置不一致
  • YAML配置格式错误,数据源参数未正确绑定

完整解决方案

步骤1:修正依赖配置(pom.xml)

<dependencies>
  <!-- 排除默认连接池 -->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
      <exclusions>
        <exclusion>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- Druid连接池 -->
      <dependency>
      <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter
posted @ 2025-10-07 19:19  wzzkaifa  阅读(119)  评论(0)    收藏  举报