PAYATHON 2026

Spring Boot 4 中 DataSourceProperties 导入无法解析,如何修复?

数据小陈

先修正 DataSourceProperties 的导入路径。项目使用 Spring Boot 4.0.5,代码引用的却是旧包名。安装 SQL Server 驱动无法解决这个 Spring Boot 类的导入错误。

1. 修改 DataSourceProperties 的导入

将原来的导入:

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

替换为:

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

在 Spring Boot 4.0.5 中,该类位于 org.springframework.boot.jdbc.autoconfigure 包中,原有的 initializeDataSourceBuilder() 用法仍然存在。可以暂时保留 DataSourceConfig 的其他代码,只修改导入路径。Spring Boot 4.0.5 源码

日志中需要关注最底层的异常:

Caused by: java.lang.NoClassDefFoundError: DataSourceProperties
Caused by: java.lang.ClassNotFoundException: DataSourceProperties

Spring 检查 DataSourceConfig 的方法时无法加载相关类型,进而导致 ApplicationContext 初始化失败。上层的 PropertyPlaceholderAutoConfiguration 报错属于同一条异常链;现有日志没有显示数据库拒绝连接或登录失败。

2. 调整 SQL Server 驱动依赖

mvn install:install-file 只会把指定 JAR 安装到本地 Maven 仓库,不会补齐 Spring Boot 中的类,也不代表整个项目完成了编译。

建议把现有的 com.microsoft.sqlserver:sqljdbc4:4.0 依赖替换为 mssql-jdbc,保留已有的 JDBC starter。数据库相关依赖可以写成:

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

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <scope>runtime</scope>
</dependency>

省略驱动版本的前提是继续使用题目中的 spring-boot-starter-parent:4.0.5,且没有覆盖其依赖管理。该版本管理了 mssql-jdbc。替换后,移除旧的 sqljdbc4 依赖,避免两个驱动 JAR 同时进入运行时类路径。Spring Boot 4.0.5 依赖管理配置

3. 修正 SQL Server 连接 URL

原配置中的地址为:

spring.datasource.url=jdbc:sqlserver://localhost:1433/test

Microsoft JDBC Driver 用分号分隔连接属性,并通过 databaseName 指定数据库。如果目标数据库确实叫 test,可以这样配置:

spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=test;encrypt=true;trustServerCertificate=false
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

其中 DB_USERNAME、DB_PASSWORD 需要在应用运行环境中设置。账号必须是 SQL Server 中实际存在、能够访问 test 数据库的登录账号;仅凭名称无法判断题目中的 root 是否有效。Microsoft JDBC 连接 URL 文档

示例启用了加密和证书校验,要求服务器证书受 JVM 信任,且连接主机名与证书匹配。如果之后出现证书错误,应检查证书和信任库配置。证书错误与当前的类加载错误属于不同阶段。

如果项目只使用 JDBC,可以移除 spring.jpa.hibernate.ddl-auto=none。该配置用于 JPA/Hibernate,不能修复这里的导入错误。

4. 清理构建,再检查运行结果

在包含 pom.xml 的项目目录依次执行:

mvn clean compile
mvn dependency:tree
mvn spring-boot:run

先确认编译通过,再检查依赖树中是否仍有旧的 sqljdbc4,或者是否混用了不同版本的 Spring Boot。如果命令行编译成功,但 VS Code 仍将旧导入标记为错误,可以在命令面板中执行 Java: Clean Java Language Server Workspace,重新加载项目。

如果编译成功后仍出现相同的类加载异常,还需要检查 IDE 的启动类路径和编译产物是否已经更新。现有材料无法确认 IDE 是否使用了残留产物。

单数据源是否需要 DataSourceConfig?

对于普通单数据源项目,如果没有排除相关自动配置,也没有额外自定义 Bean,可以移除这份手动配置。Spring Boot 会根据 JDBC starter、驱动依赖和 spring.datasource.* 创建 DataSource,并自动配置 JdbcTemplate 和 NamedParameterJdbcTemplate,供构造方法注入使用。Spring Boot 数据库配置文档

如果继续保留手动配置,就先修改导入并重新编译。数据库是否真正可连接,还要在类加载问题解决后,通过实际获取连接或执行查询确认。

备注:内容仅供参考。