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,常见两种情况:

  1. application.yml 没放在 src/main/resources 根目录(或文件名写错),导致根本没被加载;
  2. 文件加载了,但对应的 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 二选一即可。

标签
springbootjava