面试题:Spring Boot 中 application.properties 和 application.yml 的区别是什么?

在 Spring Boot 中,application.properties 和 application.yml 是两种常用的配置文件格式,它们都可以用来定义应用程序的配置。尽管它们的功能相同,但在语法和使用场景上有一些区别。以下是它们的详细对比:


1. 文件格式

1.1 application.properties

  • 使用键值对的形式,每行一个配置项。
  • 键和值之间用等号(=)或冒号(:)分隔。

1.2 application.yml

  • 使用 YAML(YAML Ain’t Markup Language)格式,是一种层次化的数据结构。
  • 使用缩进来表示层级关系,键值对之间用冒号(:)分隔。

2. 语法对比

特性application.propertiesapplication.yml
格式键值对,每行一个配置项层次化结构,使用缩进表示层级
分隔符等号(=)或冒号(:冒号(:
多行文本不支持多行文本支持多行文本(使用 `>`)
列表和数组使用逗号分隔的字符串使用 - 表示列表项
可读性简单直接,但层次化配置可读性较差层次化结构更清晰,适合复杂配置

2.1 多行文本

  • application.properties 不支持多行文本。
  • application.yml 支持多行文本

2.2 列表和数组

  • application.properties 使用逗号分隔的字符串表示列表
  • application.yml 使用 - 表示列表项:
    app:
    servers:
    - 192.168.1.1
    - 192.168.1.2
    - 192.168.1.3
    app:
      servers:
        - 192.168.1.1
        - 192.168.1.2
        - 192.168.1.3
    app: servers: - 192.168.1.1 - 192.168.1.2 - 192.168.1.3

3. 使用场景

3.1 application.properties

  • 适合简单的配置,配置项较少。
  • 适合对 YAML 不熟悉的开发者。
  • 适合需要快速编写和修改的场景。

3.2 application.yml

  • 适合复杂的配置,尤其是层次化的配置。
  • 适合需要高可读性和可维护性的场景。
  • 适合需要定义多行文本或列表的场景。

4. 优先级

如果同时存在 application.properties 和 application.yml 文件,Spring Boot 会按照以下优先级加载配置:

  1. application.properties
  2. application.yml

也就是说,application.properties 的配置会覆盖 application.yml 中的相同配置。


5. 示例对比

5.1 application.properties

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
app.servers=192.168.1.1,192.168.1.2,192.168.1.3
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
app.servers=192.168.1.1,192.168.1.2,192.168.1.3
server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=secret app.servers=192.168.1.1,192.168.1.2,192.168.1.3

5.2 application.yml

server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret
app:
servers:
- 192.168.1.1
- 192.168.1.2
- 192.168.1.3
server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: secret
app:
  servers:
    - 192.168.1.1
    - 192.168.1.2
    - 192.168.1.3
server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: secret app: servers: - 192.168.1.1 - 192.168.1.2 - 192.168.1.3

6. 总结

特性application.propertiesapplication.yml
格式键值对层次化结构
可读性简单直接,适合简单配置层次化结构更清晰,适合复杂配置
多行文本不支持支持
列表和数组使用逗号分隔的字符串使用 - 表示列表项
优先级高于 application.yml低于 application.properties

在面试中,你可以结合实际场景(如简单配置 vs 复杂配置)来展示你对这两种配置文件格式的理解和选择依据。

THE END
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容