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 数据库配置文档
如果继续保留手动配置,就先修改导入并重新编译。数据库是否真正可连接,还要在类加载问题解决后,通过实际获取连接或执行查询确认。
备注:内容仅供参考。
