知識庫 / Spring / Spring Boot RSS 訂閱

解決“無法配置數據源”錯誤

Spring Boot,Spring Data
HongKong
10
01:26 PM · Dec 06 ,2025

1. 概述

本教程將討論在 Spring Boot 項目中出現“無法配置數據源”錯誤的原因以及解決方法

我們將使用兩種不同的方法解決此問題:

  1. 定義數據源
  2. 禁用數據源的自動配置

2. 問題描述

假設我們有一個 Spring Boot 項目,並且我們已經將 spring-data-starter-jpa依賴 以及 MySQL JDBC 驅動程序 添加到我們的 pom.xml 中:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

當運行應用程序時,會遇到以下錯誤:

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

讓我們看看這背後的原因。

3. 原因

Spring Boot 自動配置旨在根據 classpath 中添加的依賴自動配置 Bean。

由於我們 classpath 中包含了 JPA 依賴,Spring Boot 會嘗試自動配置一個 JPA <em >DataSource</em>。問題在於,我們沒有為 Spring 提供它所需要的配置信息。

例如,我們沒有定義任何 JDBC 連接屬性,並且在與 MySQL 和 MSSQL 等外部數據庫一起工作時,需要這樣做。另一方面,使用內存數據庫,如 H2,則不會遇到此問題,因為它們可以在不提供這些信息的情況下創建數據源。

4. 解決方案

4.1. 定義 DataSource 使用屬性

由於問題源於數據庫連接缺失,我們可以簡單地通過提供數據源屬性來解決該問題。

首先,讓我們在項目中的 application.properties 文件中 定義數據源屬性

spring.datasource.url=jdbc:mysql://localhost:3306/myDb
spring.datasource.username=user1
spring.datasource.password=pass
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

我們也可以提供數據源屬性在 application.yml 中:

spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/myDb
    username: user1
    password: pass

4.2. 編程方式定義 DataSource

或者,我們可以通過 使用實用工具構建類 DataSourceBuilder 編程方式定義我們的數據源。

我們需要提供數據庫 URL、用户名、密碼以及 SQL 驅動信息來創建我們的數據源。

@Configuration
public class DataSourceConfig {
    @Bean
    public DataSource getDataSource() {
        return DataSourceBuilder.create()
          .driverClassName("com.mysql.cj.jdbc.Driver")
          .url("jdbc:mysql://localhost:3306/myDb")
          .username("user1")
          .password("pass")
          .build();	
    }
}

簡而言之,我們可以根據我們的需求選擇上述任何一種選項來配置數據源。

4.3. 排除 DataSourceAutoConfiguration

在上一節中,我們通過將數據源屬性添加到我們的項目中解決了問題。

但是,如果我們尚未準備好定義數據源,該怎麼辦?讓我們看看如何阻止 Spring Boot 自動配置數據源。

DataSourceAutoConfiguration 是使用 spring.datasource.* 屬性配置數據源的基礎類。

現在,有幾種方法可以排除此自動配置。

首先,我們可以使用 application.properties 文件的 spring.autoconfigure.exclude 屬性來禁用自動配置。

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

我們也可以使用我們的 application.yml 文件來完成相同的操作:

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

我們也可以在我們的 @SpringBootApplication@EnableAutoConfiguration 註解上使用 exclude 屬性:

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

在以上所有示例中,我們已禁用 Spring Boot 的自動配置,包括 DataSource。 這不會影響任何其他 Bean 的自動配置。

綜上所述,我們可以使用以上任何一種方法來禁用 Spring Boot 的數據源自動配置。

理想情況下,我們應該提供數據源信息並僅在測試中使用排除選項。

5. 結論

在本文中,我們瞭解到導致“無法配置數據源”錯誤的根本原因。

首先,我們通過定義數據源來解決這個問題。

接下來,我們討論瞭如何在不配置數據源的情況下規避該問題。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.