Spring Boot 进阶:application.properties 与 application.yml 的全方位对比与最佳实践

复制代码
博主社群介绍: ① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。
② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。
③ 群内也有职场精英,大厂大佬,跨国企业主管,可交流技术、面试、找工作的经验。
进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬,进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。
群公告里还有全网大赛约稿汇总/博客提效工具集/CSDN自动化运营脚本 有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

文章目录

    • [1. 导读与文章目标](#1. 导读与文章目标)
      • [1.1 文章目标](#1.1 文章目标)
      • [1.2 适用读者](#1.2 适用读者)
    • [2. 配置文件格式基础对比](#2. 配置文件格式基础对比)
      • [2.1 基本语法层级结构](#2.1 基本语法层级结构)
        • [2.1.1 application.properties](#2.1.1 application.properties)
        • [2.1.2 application.yml](#2.1.2 application.yml)
    • [3. 配置结构对比:嵌套与列表](#3. 配置结构对比:嵌套与列表)
      • [3.1 嵌套对象表达](#3.1 嵌套对象表达)
        • [3.1.1 properties 表达复杂结构](#3.1.1 properties 表达复杂结构)
        • [3.1.2 YAML 表达复杂结构(推荐)](#3.1.2 YAML 表达复杂结构(推荐))
      • [3.2 Mermaid 比较图](#3.2 Mermaid 比较图)
    • [4. 多环境配置:profiles 使用方式](#4. 多环境配置:profiles 使用方式)
      • [4.1 properties 方式](#4.1 properties 方式)
      • [4.2 YAML 方案(更简洁)](#4.2 YAML 方案(更简洁))
    • [5. 在 Spring Boot 中的加载顺序](#5. 在 Spring Boot 中的加载顺序)
      • [5.1 官方顺序(简化版)](#5.1 官方顺序(简化版))
      • [5.2 Mermaid 顺序图](#5.2 Mermaid 顺序图)
    • [6. 配置绑定:@Value vs @ConfigurationProperties](#6. 配置绑定:@Value vs @ConfigurationProperties)
      • [6.1 properties 与 yml 都支持](#6.1 properties 与 yml 都支持)
        • [6.1.1 @Value 示例](#6.1.1 @Value 示例)
        • [6.1.2 @ConfigurationProperties 示例](#6.1.2 @ConfigurationProperties 示例)
    • [7. 哪种方式更受社区推荐?](#7. 哪种方式更受社区推荐?)
      • [7.1 官方更推荐 YAML](#7.1 官方更推荐 YAML)
      • [7.2 但 properties 仍具价值](#7.2 但 properties 仍具价值)
    • [8. 表格总结:properties vs yml 全面对比](#8. 表格总结:properties vs yml 全面对比)
    • [9. 常见坑点与最佳实践](#9. 常见坑点与最佳实践)
      • [9.1 YAML 容易踩的坑](#9.1 YAML 容易踩的坑)
        • [9.1.1 缩进错误](#9.1.1 缩进错误)
        • [9.1.2 Tab 键禁用](#9.1.2 Tab 键禁用)
      • [9.2 properties 容易踩的坑](#9.2 properties 容易踩的坑)
        • [9.2.1 字符串包含等号需要转义](#9.2.1 字符串包含等号需要转义)
    • [10. 真实业务中的推荐实践](#10. 真实业务中的推荐实践)
      • [10.1 小型项目(个人、小工具)](#10.1 小型项目(个人、小工具))
      • [10.2 中大型业务系统](#10.2 中大型业务系统)
      • [10.3 配置覆盖策略](#10.3 配置覆盖策略)
    • 结束语

1. 导读与文章目标

1.1 文章目标

本篇文章旨在从多个角度深入探讨 application.propertiesapplication.yml,覆盖但不限于:

  • 语法层面差异
  • 可读性与维护性
  • 多环境配置策略
  • 配置注入、层级结构表达
  • 复杂配置场景(多维结构、列表、Map)
  • 与 Spring Boot 官方推荐的使用方式
  • 高级技巧与避坑指南

1.2 适用读者

  • Spring Boot 初学者
  • 对配置管理有更高要求的后端工程师
  • 架构师、技术负责人
  • 希望写出更规范、更可维护项目的开发者

2. 配置文件格式基础对比

2.1 基本语法层级结构

2.1.1 application.properties

properties 本质上是 "键值对平铺结构"。

示例:

properties 复制代码
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root

它的特点:

特性 描述
层级结构用"点"展开 spring.datasource.url
不支持复杂结构(List、Map) 需要手动展开
不支持注释块 只支持 # 单行注释
2.1.2 application.yml

YAML 是一种更现代、更表达式的配置格式,支持嵌套结构与列表。

示例:

yaml 复制代码
server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo
    username: root

YAML 特点:

特性 描述
层级结构通过缩进表达 更贴近对象结构
原生支持 List、Map 无需展开
可读性高,适合复杂配置

3. 配置结构对比:嵌套与列表

3.1 嵌套对象表达

这部分是 YAML 完胜 properties 的典型场景。

3.1.1 properties 表达复杂结构
properties 复制代码
user.address.city=Shanghai
user.address.street=East Road
user.roles[0]=admin
user.roles[1]=editor

非常冗长,不够直观。

3.1.2 YAML 表达复杂结构(推荐)
yaml 复制代码
user:
  address:
    city: Shanghai
    street: East Road
  roles:
    - admin
    - editor

3.2 Mermaid 比较图

application.properties 平铺结构 列表需按下标展开 阅读复杂配置困难 application.yml 缩进表达层级 天然支持列表 适合复杂场景

图 1:properties 与 yml 结构表达能力对比


4. 多环境配置:profiles 使用方式

4.1 properties 方式

properties 复制代码
spring.profiles.active=dev

多环境:

复制代码
application-dev.properties
application-prod.properties

4.2 YAML 方案(更简洁)

yaml 复制代码
spring:
  profiles:
    active: dev

甚至支持多配置块合并:

yaml 复制代码
server:
  port: 8000

---
spring:
  profiles: dev
server:
  port: 8001

---
spring:
  profiles: prod
server:
  port: 9001

5. 在 Spring Boot 中的加载顺序

理解加载顺序至关重要,不同环境下配置冲突时,知道谁覆盖谁能避免线上事故。

5.1 官方顺序(简化版)

text 复制代码
1. 命令行参数(优先级最高)
2. application.properties / yml(classpath)
3. 外部配置文件(优先级更高)
4. @PropertySource
5. @ConfigurationProperties 默认值

5.2 Mermaid 顺序图

命令行参数 外部 application.yml 内部 application.yml @ConfigurationProperties 覆盖 覆盖 覆盖 命令行参数 外部 application.yml 内部 application.yml @ConfigurationProperties


6. 配置绑定:@Value vs @ConfigurationProperties

6.1 properties 与 yml 都支持

但 YAML 在对象绑定时可读性更强。

6.1.1 @Value 示例
java 复制代码
@Value("${user.address.city}")
private String city;

适用于:简单值注入。

6.1.2 @ConfigurationProperties 示例

示例 YAML:

yaml 复制代码
user:
  name: Jack
  age: 20
  address:
    city: Shenzhen

Java 绑定:

java 复制代码
@ConfigurationProperties(prefix = "user")
@Data
public class UserConfig {
    private String name;
    private Integer age;

    private Address address;

    @Data
    public static class Address {
        private String city;
    }
}

7. 哪种方式更受社区推荐?

7.1 官方更推荐 YAML

原因:

  1. 配置清晰,层次结构更明显
  2. 更适合复杂配置(Redis、Kafka、微服务配置)
  3. 支持多 profile 合并写法

7.2 但 properties 仍具价值

尤其在:

  • 小项目
  • 工具类
  • DevOps 配置大量使用 properties
  • IDE 搜索更精确(键名搜索)

8. 表格总结:properties vs yml 全面对比

对比项 application.properties application.yml
表达结构 平铺键值对 分层结构,缩进表达
可读性
列表表达 不友好 原生支持
复杂配置 不推荐 强烈推荐
维护成本 中等 更低
官方示例 较少 较多
搜索友好度 一般
常用场景 小型项目 中大型项目、微服务
多 profile 文件分离 单文件合并支持
可扩展性

9. 常见坑点与最佳实践

9.1 YAML 容易踩的坑

9.1.1 缩进错误

示例(错误):

yaml 复制代码
user:
 name: Tom

必须是 2 个空格缩进:

yaml 复制代码
user:
  name: Tom
9.1.2 Tab 键禁用

YAML 不允许使用 Tab。

9.2 properties 容易踩的坑

9.2.1 字符串包含等号需要转义
properties 复制代码
password=p@ss=123   # 可能被解析异常

10. 真实业务中的推荐实践

10.1 小型项目(个人、小工具)

  • 使用 application.properties
  • 原因:结构简单,文件短小,IDE 搜索友好

10.2 中大型业务系统

  • 使用 application.yml
  • 特别适合以下场景:
    • Redis、Kafka、RabbitMQ 多实例管理
    • 微服务配置大量嵌套结构
    • 多环境配置需要合并

10.3 配置覆盖策略

优先级顺序:

复制代码
云配置 > 外部 yml > 内部 yml > properties > 默认值

如果你需要我进一步批量处理格式、自动转换为 Markdown 或生成 PDF,也可以继续告诉我。

结束语

👨‍💻 关于我

持续学习 | 追求真我

如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。
感谢订阅专栏 三连文章

掘金点击访问Qiuner CSDN点击访问Qiuner GitHub点击访问Qiuner Gitee点击访问Qiuner

专栏 简介
📊 一图读懂系列 图文并茂,轻松理解复杂概念
📝 一文读懂系列 深入浅出,全面解析技术要点
🌟持续更新 保持学习,不断进步
🎯 人生经验 经验分享,共同成长

你好,我是Qiuner. 为帮助别人少走弯路而写博客

如果本篇文章帮到了你 不妨点个 吧~ 我会很高兴的 😄 (^ ~ ^) 。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。

代码都在Github或Gitee上,如有需要可以去上面自行下载。记得给我点星星哦😍

如果你遇到了问题,自己没法解决,可以去我掘金评论区问。CSDN评论区和私信消息看不完 掘金消息少一点.

上一篇推荐 链接
Java程序员快又扎实的学习路线 点击该处自动跳转查看哦
一文读懂 AI 点击该处自动跳转查看哦
一文读懂 服务器 点击该处自动跳转查看哦
2024年创作回顾 点击该处自动跳转查看哦
一文读懂 ESLint配置 点击该处自动跳转查看哦
老鸟如何追求快捷操作电脑 点击该处自动跳转查看哦
未来会写什么文章? 预告链接
一文读懂 XX? 点击该处自动跳转查看哦
2025年终总结 点击该处自动跳转查看哦
一图读懂 XX? 点击该处自动跳转查看哦
相关推荐
f***281420 分钟前
Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
spring boot·elasticsearch·jenkins
你怎么知道我是队长27 分钟前
C语言---文件读写
java·c语言·开发语言
咕白m62535 分钟前
通过 C# 快速生成二维码 (QR code)
后端·.net
踏浪无痕42 分钟前
架构师如何学习 AI:三个月掌握核心能力的务实路径
人工智能·后端·程序员
小毅&Nora1 小时前
【后端】【SpringBoot】① 源码解析:从启动到优雅关闭
spring boot·后端·优雅关闭
嘻哈baby1 小时前
从TIME_WAIT爆炸到端口耗尽:Linux短连接服务排查与优化
后端
wszy18091 小时前
外部链接跳转:从 App 打开浏览器的正确姿势
java·javascript·react native·react.js·harmonyos
开心就好20251 小时前
iOS应用性能监控全面解析:CPU、内存、FPS、卡顿与内存泄漏检测
后端
期待のcode1 小时前
认识Java虚拟机
java·开发语言·jvm
raining_peidx1 小时前
xxljob源码
java·开发语言