惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
博客园 - Franky
GbyAI
GbyAI
B
Blog
WordPress大学
WordPress大学
D
Docker
小众软件
小众软件
月光博客
月光博客
博客园 - 【当耐特】
T
The Blog of Author Tim Ferriss
IT之家
IT之家
腾讯CDC
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
H
Help Net Security
M
MIT News - Artificial intelligence
L
LangChain Blog
云风的 BLOG
云风的 BLOG
S
SegmentFault 最新的问题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
美团技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

沉迷在 - Java.li - 无法自拔

Spring Boot 整合 MyBatis DeepSeek Harness 深入解读 Spring Boot 连接 MySQL GitHub发生故障,崩了7个小时 Spring Boot 配置文件怎么写 SpringBoot 教程 MyBatis Invalid bound statement 怎么处理 Spring Boot 端口被占用怎么处理 Qdrant 向量数据库入门 Spring Boot 接收 JSON 参数 Maven依赖冲突怎么排查?dependency:tree、exclusions与版本统一完整教程 - 沉迷在 - Java.li - 无法自拔 给网站加一条会动的人群横幅:Little People 动画组件 Demo - 沉迷在 - Java.li - 无法自拔 【soso.re】聚合热榜 | CloudflareWorkers部分接口失效的排查与代理方案 - 沉迷在 - Java.li - 无法自拔 Spring Boot 2升级到Spring Boot 3完整指南:JDK17、javax迁移jakarta、依赖兼容与常见报错 - 沉迷在 - Java.li - 无法自拔 随机小姐姐视频 - 沉迷在 - Java.li - 无法自拔 Spring Boot与JDK版本兼容表:Spring Boot 2.x / 3.x / 4.x应该用哪个Java版本? - 沉迷在 - Java.li - 无法自拔 No compiler is provided in this environment解决办法:JDK、JRE、Maven与IDEA排查 - 沉迷在 - Java.li - 无法自拔 置身钉内|含全文 PDF - 沉迷在 - Java.li - 无法自拔 javac不是内部或外部命令怎么解决?JDK、JAVA_HOME和Path完整排查 Windows配置JAVA_HOME后不生效怎么办?java -version显示旧版本解决办法 Maven Could not transfer artifact 下载失败解决:settings.xml、国内镜像、本地缓存与代理排查 JSON转Java实体类完整教程:对象、数组、嵌套结构与LocalDateTime处理 Windows安装JDK 8 / 17 / 21 / 25完整教程:JAVA_HOME环境变量配置与验证 IDEA下载JDK很慢怎么办?手动配置本地JDK完整教程 Java版本号与class文件major version对照表:Unsupported class file major version 52 / 55 / 61 / 65 / 69 / 70 Gradle国内镜像配置教程:init.gradle、repositories与Wrapper加速完整指南 Maven国内镜像settings.xml配置大全:阿里云、腾讯云、华为云、清华源 Java开发者必备工具箱 2026年Java行情深度解读:就业真实现状、语言排名与开发者破局指南 如何防止服务器被暴力破解?2026年最全的5层防护实战指南
Spring Boot启动报错 Failed to configure a DataSource 解决...
HiF · 2026-07-23 · via 沉迷在 - Java.li - 无法自拔

最后更新:2026-07-23
适用场景:Spring Boot 启动失败、Failed to configure a DataSource、url attribute is not specified、Failed to determine a suitable driver class、数据库配置缺失、JPA / MyBatis 项目启动报错

Spring Boot 项目启动时,经常会遇到下面这个错误:

APPLICATION FAILED TO START

Description:

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.

翻译成人话就是:

Spring Boot 想帮你自动配置一个数据库连接池,
但是它没有找到数据库连接地址,
也没有找到可用的内嵌数据库,
所以启动失败。

这个错误非常常见,尤其容易出现在这些场景里:

新建 Spring Boot 项目时勾选了 MySQL / JPA / MyBatis
pom.xml 引入了 spring-boot-starter-data-jpa
pom.xml 引入了 spring-boot-starter-jdbc
配置文件里没有 spring.datasource.url
application-dev.yml 写了数据库配置,但 dev 环境没激活
数据库驱动依赖没加
配置文件缩进写错
项目其实不需要数据库,却引入了数据库相关 starter

Spring Boot 官方文档说明,DataSource 配置主要由 spring.datasource.* 这组外部配置控制,至少应该配置 spring.datasource.url;如果没有配置 URL,Spring Boot 会尝试自动配置内嵌数据库。Spring Boot 也可以根据 JDBC URL 推断大多数数据库驱动类,但前提是对应驱动类在 classpath 中可用。([Home][1])


一、先说结论:这个错误怎么解决?

先判断你的项目到底需不需要数据库。

情况一:项目需要数据库

那就正确配置数据库连接:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

并确认 Maven / Gradle 中已经引入数据库驱动。

情况二:项目暂时不需要数据库

那就不要让 Spring Boot 自动配置 DataSource。

可以:

1. 删除 spring-boot-starter-jdbc / spring-boot-starter-data-jpa / mybatis-spring-boot-starter 等依赖
2. 或者排除 DataSourceAutoConfiguration

Spring Boot 官方文档说明,如果你不希望某些自动配置生效,可以通过 @SpringBootApplicationexclude 属性排除,也可以使用 spring.autoconfigure.exclude 配置项。([Home][2])


二、为什么会出现 Failed to configure a DataSource?

Spring Boot 的自动配置会根据项目 classpath 判断你可能需要什么功能。

比如你引入了:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

或者:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

Spring Boot 就会认为:

你这个项目需要数据库连接。

于是它会尝试创建一个 DataSource

但创建 DataSource 至少需要知道:

数据库地址
数据库用户名
数据库密码
数据库驱动

也就是常见的:

spring:
  datasource:
    url: ...
    username: ...
    password: ...
    driver-class-name: ...

如果这些信息缺失,就可能报:

Failed to configure a DataSource

三、完整错误示例

常见完整报错如下:

***************************
APPLICATION FAILED TO START
***************************

Description:

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.

Action:

Consider the following:
    If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    If you have database settings to be loaded from a particular profile you may need to activate it.

这个错误信息其实已经给了两个方向:

1. 你要么配置一个真实数据库
2. 要么提供一个内嵌数据库
3. 如果数据库配置在 profile 里,要确认 profile 已经激活

四、场景一:项目需要MySQL数据库

这是最常见场景。

1. Maven添加MySQL驱动

Spring Boot 3.x / 4.x 项目推荐使用:

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

如果你是较老项目,也可能看到旧坐标:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

新项目建议优先使用 com.mysql:mysql-connector-j


2. application.yml配置MySQL

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

如果使用 application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

其中最关键的是:

spring.datasource.url

没有这个配置,Spring Boot 不知道连接哪个数据库。


3. MySQL 8驱动类写什么?

推荐:

com.mysql.cj.jdbc.Driver

不推荐老写法:

com.mysql.jdbc.Driver

一般情况下,Spring Boot 可以根据 JDBC URL 推断驱动类,所以 driver-class-name 也可以不写。但如果报错提示找不到驱动,建议明确配置。官方文档也说明,Spring Boot 可以根据 URL 推断大多数数据库驱动类;如果你显式指定驱动类,该类必须可以被加载。([Home][1])


五、场景二:项目需要PostgreSQL数据库

Maven 依赖:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

配置:

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/demo
    username: postgres
    password: 123456
    driver-class-name: org.postgresql.Driver

application.properties

spring.datasource.url=jdbc:postgresql://localhost:5432/demo
spring.datasource.username=postgres
spring.datasource.password=123456
spring.datasource.driver-class-name=org.postgresql.Driver

六、场景三:项目需要H2内嵌数据库

如果你只是学习、测试、写 Demo,可以使用 H2。

Maven 依赖:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

配置:

spring:
  datasource:
    url: jdbc:h2:mem:testdb
    username: sa
    password:
    driver-class-name: org.h2.Driver

  h2:
    console:
      enabled: true

H2 控制台默认路径通常是:

/h2-console

注意:H2 适合学习和测试,不建议直接当生产数据库。


七、场景四:项目其实不需要数据库

有些项目只是:

纯接口转发
纯工具服务
只调用第三方接口
不访问数据库
刚创建项目时误选了JPA或MyBatis

这时你可以删除数据库相关依赖。

检查 pom.xml 中是否有:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

或者:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

或者:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>

如果项目不需要数据库,直接删除这些依赖是最干净的方式。


八、场景五:排除DataSourceAutoConfiguration

如果你暂时不想删除依赖,也可以排除 DataSource 自动配置。

Spring Boot 2.x / 3.x 常见写法

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

Spring Boot 4.x 注意包名

Spring Boot 4.x 中部分类的位置可能发生变化。如果你的 IDE 提示上面的包导入失败,以 IDE 自动导入和你当前版本官方文档为准。当前 Spring Boot 文档中的排除示例使用的是:

import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration;

官方文档也明确给出了通过 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) 排除自动配置的示例。([Home][2])


九、也可以在配置文件中排除

application.yml

spring:
  autoconfigure:
    exclude:
      - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

application.properties

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

如果你使用的是 Spring Boot 4.x,且包名变为:

org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration

则需要根据实际版本调整。

建议优先使用 IDE 自动补全或查看当前版本源码。


十、什么时候不建议排除DataSourceAutoConfiguration?

如果你的项目实际需要数据库,比如:

使用 JPA
使用 MyBatis
使用 JdbcTemplate
需要事务
需要访问 MySQL / PostgreSQL / Oracle

那就不要用排除自动配置来“掩盖问题”。

这种情况下正确做法是:

配置数据库连接
添加数据库驱动
激活正确环境
检查数据库是否可访问

否则后面还会继续报:

No qualifying bean of type 'javax.sql.DataSource'
No qualifying bean of type 'EntityManagerFactory'
No qualifying bean of type 'JdbcTemplate'
No qualifying bean of type 'SqlSessionFactory'

十一、场景六:application-dev.yml写了数据库配置,但没有激活dev环境

很多项目是这样配置的:

application.yml
application-dev.yml
application-prod.yml

数据库配置写在:

application-dev.yml

例如:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo
    username: root
    password: 123456

但启动时没有激活 dev,那么 Spring Boot 不会读取 application-dev.yml

解决方式一:在application.yml中激活

spring:
  profiles:
    active: dev

解决方式二:启动参数激活

java -jar demo.jar --spring.profiles.active=dev

解决方式三:IDEA中配置

Run > Edit Configurations > Active profiles

填入:

dev

或者在 VM options / Program arguments 中添加:

--spring.profiles.active=dev

十二、场景七:配置文件缩进写错

YAML 对缩进非常敏感。

错误示例:

spring:
datasource:
  url: jdbc:mysql://localhost:3306/demo
  username: root
  password: 123456

正确示例:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo
    username: root
    password: 123456

注意:

datasource 要在 spring 下面
url、username、password 要在 datasource 下面
缩进建议统一使用两个空格
不要混用 Tab

如果你不确定 YAML 是否正确,可以临时改成 application.properties 测试:

spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=123456

十三、场景八:配置项写错了

常见错误写法:

spring:
  dataSource:
    url: jdbc:mysql://localhost:3306/demo

这里 dataSource 大小写不对。

正确:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo

常见错误还有:

spring:
  datasource:
    jdbc-url: jdbc:mysql://localhost:3306/demo

对于 Spring Boot 标准 DataSource 配置,通常应该使用:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo

需要注意:HikariCP 本身使用 jdbc-url,但 Spring Boot 标准的 spring.datasource.url 会通过 DataSourceProperties 处理这些差异。Spring Boot 官方自定义 DataSource 文档也提到,如果直接绑定到 Hikari,urljdbc-url 的差异需要注意;使用 DataSourceProperties 可以处理这种转换。([Home][3])


十四、场景九:数据库驱动依赖缺失

比如你配置了 MySQL:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo
    username: root
    password: 123456

但没有添加 MySQL 驱动。

Maven 需要有:

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

否则可能报:

Failed to determine a suitable driver class

或者:

Cannot load driver class: com.mysql.cj.jdbc.Driver

检查依赖是否存在:

mvn dependency:tree -Dincludes=com.mysql:mysql-connector-j

如果 Maven 下载依赖失败,可以看:

Maven Could not transfer artifact 下载失败解决


十五、场景十:密码包含特殊字符

例如数据库密码是:

abc@123:456

在 YAML 中如果不加引号,有时可能被解析出问题。

建议写成:

spring:
  datasource:
    password: "abc@123:456"

或者:

spring:
  datasource:
    password: 'abc@123:456'

尤其是密码里有这些字符时,建议加引号:

:
@
#
&
*
!
%
空格

十六、场景十一:Docker或服务器环境变量没有传入

本地运行正常,部署后报:

Failed to configure a DataSource

可能是生产环境配置没有传进去。

例如你的配置是:

spring:
  datasource:
    url: ${DB_URL}
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}

但 Docker 启动时没有传:

docker run \
  -e DB_URL=jdbc:mysql://mysql:3306/demo \
  -e DB_USERNAME=root \
  -e DB_PASSWORD=123456 \
  demo-app:latest

如果环境变量为空,最终就相当于没有配置数据库地址。

建议启动时打印或检查:

DB_URL
DB_USERNAME
DB_PASSWORD
SPRING_PROFILES_ACTIVE

也可以在启动参数中直接指定:

java -jar demo.jar \
  --spring.datasource.url=jdbc:mysql://localhost:3306/demo \
  --spring.datasource.username=root \
  --spring.datasource.password=123456

十七、场景十二:测试环境启动失败

有些项目正常启动没问题,但执行测试时报:

Failed to configure a DataSource

常见原因:

@SpringBootTest 会加载完整 Spring 容器
测试环境没有配置数据库
测试 profile 没激活
测试中引入了 JPA / MyBatis 但没有 DataSource

解决方式一:测试环境使用 H2

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>test</scope>
</dependency>

application-test.yml

spring:
  datasource:
    url: jdbc:h2:mem:testdb
    username: sa
    password:
    driver-class-name: org.h2.Driver

测试类:

@ActiveProfiles("test")
@SpringBootTest
class DemoApplicationTests {
}

解决方式二:测试时排除 DataSource 自动配置

适合不需要数据库的单元测试。

@SpringBootTest(properties = {
        "spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"
})
class DemoApplicationTests {
}

如果是 Spring Boot 4.x,请根据实际包名调整。


十八、场景十三:多数据源配置错误

多数据源项目中,如果配置不完整,也可能出现类似问题。

常见问题:

没有指定主数据源
没有加 @Primary
DataSourceProperties 前缀写错
一个数据源配置完整,另一个不完整
Mapper 扫描路径和数据源没绑定好

Spring Boot 官方文档给出了配置两个 DataSource 的思路,并提醒额外的 DataSource 可以通过自定义配置属性和 Bean 来定义。([Home][3])

简单示例:

@Configuration
public class DataSourceConfig {

    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource.primary")
    public DataSourceProperties primaryDataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean
    @Primary
    public DataSource primaryDataSource() {
        return primaryDataSourceProperties()
                .initializeDataSourceBuilder()
                .build();
    }
}

多数据源比单数据源复杂很多,不建议新手一开始就自己手写多数据源配置。


十九、Spring Boot 2升级3后出现这个错误怎么办?

如果你是在 Spring Boot 2 升级到 Spring Boot 3 后遇到这个错误,优先检查:

JDK是否升级到17或更高
JPA相关依赖是否迁移到jakarta
MyBatis / MyBatis-Plus版本是否支持Spring Boot 3
数据库驱动是否还在
application.yml配置是否仍然生效
profile是否激活

Spring Boot 3 使用 Spring Framework 6 和 Jakarta EE 相关 API,很多旧依赖可能还停留在 javax.* 时代。

可以先看:

Spring Boot 2升级到Spring Boot 3完整指南

以及:

Spring Boot与JDK版本兼容表


二十、MyBatis项目怎么配置?

Maven 依赖示例:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.4</version>
</dependency>

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath*:mapper/**/*.xml
  type-aliases-package: com.example.demo.entity

注意:MyBatis 也需要 DataSource。
如果你引入了 MyBatis starter,但不配置数据库,一样可能触发这个错误。


二十一、JPA项目怎么配置?

Maven 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

开发阶段可以临时用:

spring:
  jpa:
    show-sql: true

生产环境不建议随便使用:

ddl-auto: update

生产环境应谨慎管理数据库结构变更。


二十二、如何快速定位到底是哪个自动配置生效了?

可以加启动参数:

java -jar demo.jar --debug

或者在 IDEA 启动参数中添加:

--debug

Spring Boot 官方文档说明,启动时使用 --debug 可以输出条件评估报告,帮助你查看哪些自动配置被应用、为什么被应用或为什么没有应用。([Home][2])

启动后搜索:

DataSourceAutoConfiguration

你可以看到 DataSource 自动配置为什么生效,以及哪些条件匹配。


二十三、完整排查流程

遇到 Failed to configure a DataSource,按下面顺序排查:

1. 项目是否真的需要数据库
2. pom.xml / build.gradle 是否引入了 jdbc、jpa、mybatis 等依赖
3. application.yml 是否配置了 spring.datasource.url
4. username 和 password 是否配置
5. 数据库驱动依赖是否存在
6. driver-class-name 是否正确
7. YAML 缩进是否正确
8. 是否使用了 application-dev.yml 但没有激活 dev
9. Docker / 服务器环境变量是否传入
10. 数据库服务是否启动
11. 数据库地址、端口、库名是否正确
12. 密码是否包含特殊字符且未加引号
13. 测试环境是否缺少 DataSource
14. 多数据源是否缺少 @Primary
15. Spring Boot 2 升级 3 后依赖是否兼容
16. 如果不需要数据库,删除相关依赖或排除 DataSourceAutoConfiguration
17. 使用 --debug 查看自动配置报告

二十四、常见错误写法汇总

1. 没有配置url

错误:

spring:
  datasource:
    username: root
    password: 123456

正确:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo
    username: root
    password: 123456

2. datasource缩进错误

错误:

spring:
datasource:
  url: jdbc:mysql://localhost:3306/demo

正确:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo

3. 配置了dev但没有激活

存在:

application-dev.yml

但没有:

spring:
  profiles:
    active: dev

或者启动参数没有:

--spring.profiles.active=dev

4. 忘记加数据库驱动

配置了:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo

但没加:

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

5. 项目不需要数据库但引入了JPA

如果项目不需要数据库,就不要引入:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

二十五、常见问题FAQ

1. Failed to configure a DataSource是什么意思?

意思是 Spring Boot 想自动创建数据库连接池,但缺少必要配置,例如数据库 URL、驱动、用户名密码,或者找不到内嵌数据库。


2. 只要配置spring.datasource.url就够了吗?

不一定。

通常还需要:

spring.datasource.username
spring.datasource.password
数据库驱动依赖

大多数数据库可以根据 URL 推断驱动,但驱动依赖必须存在。


3. Spring Boot项目不需要数据库,怎么解决?

最推荐删除数据库相关依赖。

如果暂时不能删除,可以排除:

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

或者在配置中使用:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

4. application-dev.yml里有数据库配置,为什么还报错?

因为 dev 环境可能没有激活。

检查:

spring:
  profiles:
    active: dev

或者启动参数:

--spring.profiles.active=dev

5. 为什么MyBatis项目也会报这个错误?

因为 MyBatis 也需要 DataSource。只要引入了 MyBatis starter 并需要访问数据库,就必须配置数据库连接。


6. 为什么JPA项目更容易出现这个错误?

因为 spring-boot-starter-data-jpa 会触发 JPA、Hibernate、DataSource 等自动配置。如果没有数据库配置,启动时就容易失败。


7. 能不能直接排除DataSourceAutoConfiguration?

可以,但只适合项目不需要数据库的情况。

如果项目需要数据库,直接排除只是绕过当前错误,后面会出现更多 Bean 缺失问题。


8. Spring Boot 3和Spring Boot 2这个问题一样吗?

核心原因一样,都是 DataSource 配置缺失或依赖不完整。但 Spring Boot 3 还要注意 Jakarta、JDK17、第三方依赖兼容等升级问题。


9. 这个错误和Maven依赖下载失败有关吗?

不完全是。

如果数据库驱动没下载下来,可能间接导致找不到驱动。
但如果报的是 Could not transfer artifact,应该优先排查 Maven 镜像和依赖下载问题。

可以看:

Maven Could not transfer artifact 下载失败解决


10. 用H2可以解决吗?

如果只是学习或测试,可以用 H2。

如果项目最终要连接 MySQL、PostgreSQL、Oracle 等正式数据库,还是应该配置真实数据库。


二十六、最终总结

Failed to configure a DataSource 的核心原因通常是:

项目引入了数据库相关依赖,
Spring Boot 尝试自动配置 DataSource,
但没有找到足够的数据库连接信息。

解决思路只有两个:

项目需要数据库:
配置 spring.datasource.url、username、password,并添加数据库驱动。

项目不需要数据库:
删除数据库相关依赖,或排除 DataSourceAutoConfiguration。

不要一上来就盲目排除自动配置。
先判断项目到底需不需要数据库。

最常见正确 MySQL 配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

最常见排查命令:

mvn dependency:tree
java -jar demo.jar --debug

二十七、相关文章

Spring Boot 与 JDK 版本兼容:

Spring Boot与JDK版本兼容表:Spring Boot 2.x / 3.x / 4.x应该用哪个Java版本?

Spring Boot 2 升级 3:

Spring Boot 2升级到Spring Boot 3完整指南

Maven 依赖下载失败:

Maven Could not transfer artifact 下载失败解决

Maven 依赖冲突排查:

Maven依赖冲突怎么排查?dependency:tree、exclusions与版本统一完整教程

JDK 下载地址:

各版本JDK镜像下载地址

Windows 安装 JDK:

Windows安装JDK与JAVA_HOME环境变量配置教程

完整环境专题:

Java开发环境配置专题


更新记录

2026-07-23:
- 创建 Spring Boot Failed to configure a DataSource 报错解决教程
- 增加 MySQL、PostgreSQL、H2 配置示例
- 增加 application.yml / application.properties 配置方式
- 增加 DataSourceAutoConfiguration 排除方式
- 增加 profile 未激活、YAML 缩进、数据库驱动缺失排查
- 增加测试环境、多数据源、Docker 环境变量场景
- 增加 Spring Boot 2 升级 3 后相关排查