Spring Boot应用无法连接MySQL数据库,求排查原因
根据你提供的报错信息和配置,出现Failed to configure a DataSource: 'url' attribute is not specified错误,主要有以下几种可能的原因:
1. 配置文件未被正确加载
Spring Boot默认只会读取src/main/resources目录下的application.yml/application.properties文件。如果你的配置文件放在了其他目录,或者文件名拼写错误,Spring Boot就无法读取到数据源配置,从而触发该报错。
解决方法:
- 确认
application.yml文件位于src/main/resources根目录下; - 检查文件名拼写是否正确,确保是
application.yml。
2. YAML配置格式错误
YAML对缩进要求非常严格,必须使用空格(不能用Tab键),且同一层级的属性缩进必须一致。如果你的spring.datasource下的属性缩进不一致,或者存在语法错误,会导致配置无法被解析,Spring Boot依然会认为没有配置数据源URL。
解决方法:
- 检查
application.yml中driver-class-name、url、username、password的缩进是否完全对齐,确保都是在datasource下的同一层级; - 替换所有Tab键为空格(推荐用2个或4个空格统一缩进)。
3. MySQL驱动依赖不兼容或未正确导入
你使用的Spring Boot版本是3.1.3,而依赖中的mysql-connector-java是8.0.28。Spring Boot 3.x基于Jakarta EE规范,旧的mysql-connector-java是基于Java EE的,虽然部分版本兼容,但更推荐使用官方适配Jakarta的mysql-connector-j依赖。另外,如果Maven依赖未正确下载,也会导致驱动类无法被找到。
解决方法:
- 修改pom.xml中的MySQL依赖,替换为:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-j</artifactId> <!-- 可以去掉version,让Spring Boot的依赖管理自动匹配兼容版本 --> </dependency>
- 执行Maven命令
mvn clean install -U,强制更新并重新下载依赖,确保驱动包被正确导入项目。
4. 验证配置是否生效
如果以上步骤都没问题,可以在启动类中添加一段代码,验证配置是否被正确读取:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.core.env.Environment; import javax.annotation.PostConstruct; @SpringBootApplication public class YourApplication { @Autowired private Environment env; public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } @PostConstruct public void checkDatasourceConfig() { System.out.println("读取到的数据库URL:" + env.getProperty("spring.datasource.url")); System.out.println("读取到的驱动类:" + env.getProperty("spring.datasource.driver-class-name")); } }
如果打印结果为null,说明配置确实未被加载,需要重新检查配置文件的位置和格式;如果能正常打印,再排查数据库连接本身的问题(比如MySQL服务是否启动、端口是否正确、数据库名是否存在等)。
内容的提问来源于stack exchange,提问作者Letitia

