You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成MySQL JDBC时驱动加载提示问题求助

解决Spring Boot中MySQL JDBC驱动加载失败问题

问题根源分析

你的项目存在几个关键问题导致驱动加载异常:

  1. 手动JDBC连接与Spring Boot自动配置冲突:自定义Database类直接使用DriverManager获取连接,和Spring Boot通过starter-data-jpa/jdbc提供的自动数据源配置产生类加载冲突。
  2. 冗余依赖引发类路径混乱:spring-boot-starter-web已经包含spring-web和spring-context,单独指定版本引入这两个依赖会破坏Spring Boot的依赖管理机制,可能导致类加载异常。
  3. 不必要的驱动显式加载:JDBC 4.0及以上版本(MySQL 8.0驱动符合规范)会通过SPI自动注册驱动,无需手动调用Class.forName("com.mysql.cj.jdbc.Driver")。

分步解决方案

1. 清理POM.xml中的冗余依赖

移除单独引入的spring-web和spring-context,同时根据需求二选一保留spring-boot-starter-data-jdbc或spring-boot-starter-data-jpa(无需同时引入):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.8</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>medica3</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>medica3</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 根据数据访问需求二选一 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.32</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2. 替换手动连接逻辑,使用Spring Boot自动配置的数据源

删除自定义的Database类,改用Spring Boot注入的DataSource来获取连接,推荐搭配JdbcTemplate简化操作:

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@Component
public class DatabaseService {
    private final DataSource dataSource;

    // 构造函数注入Spring自动配置的数据源
    public DatabaseService(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    public Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }

    // 推荐使用JdbcTemplate替代原生JDBC操作
    public JdbcTemplate getJdbcTemplate() {
        return new JdbcTemplate(dataSource);
    }
}

3. 优化application.properties配置

添加时区参数避免MySQL时区错误,同时可省略driver-class-name(Spring Boot会根据URL自动推断驱动类):

spring.datasource.url=jdbc:mysql://localhost:3306/med?serverTimezone=UTC&useSSL=false
spring.datasource.username=root
spring.datasource.password=
# 可选配置:Spring Boot可自动识别,可省略
# spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

4. 重新构建并启动项目

执行以下命令清理缓存并重新构建:

mvn clean install -U
mvn spring-boot:run

补充检查点

  • 确认本地MySQL服务正常运行,3306端口开放,目标数据库med已创建。
  • 检查Maven本地仓库中mysql-connector-java-8.0.32.jar是否存在,若文件损坏可删除后重新执行mvn install。

内容的提问来源于stack exchange,提问作者Luis Rosúa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:05:32