java
技术随笔
spring boot 默认使用 application.yml
问题
新建 Spring Boot 项目后,默认配置文件是 application.properties。听说 properties 容易出现中文乱码,于是新建了 application.yml 把数据库配置写进去,一运行却报错:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.把配置写回 application.properties 又正常了,纠结良久才发现根因其实很简单。
原因
这个报错并不是 yml 不能用,而是 Spring Boot 的 DataSourceAutoConfiguration 生效了(通常因为你引入了 spring-boot-starter-jdbc / spring-boot-starter-data-jpa),它要求必须能装配出一个 DataSource。报错说明它没有读到 spring.datasource.url,常见两种情况:
application.yml没放在src/main/resources根目录(或文件名写错),导致根本没被加载;- 文件加载了,但对应的
spring.datasource.*配置缺失或缩进层级写错。
解决办法
一、确认 yml 位置与内容
把 application.yml 放到 src/main/resources/ 下,注意 YAML 用空格缩进(别用 Tab):
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver二、如果项目暂时不用数据库
在启动类上排除数据源自动配置即可:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})这样没有 spring.datasource 配置也能正常启动。yml 完全可以作为 Spring Boot 默认配置,和 properties 二选一即可。