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? 点击该处自动跳转查看哦
相关推荐
寒山李白2 小时前
Mybatis使用教程之XML配置方式实现增删改查
xml·java·mybatis
Seven972 小时前
剑指offer-38、⼆叉树的深度
java
Kapaseker2 小时前
一文入门 Java Stream
java
optimistic_chen2 小时前
【Java EE进阶 --- SpringBoot】Spring事务
java·spring boot·笔记·spring·java-ee·事务
leonardee2 小时前
【玩转全栈】----Django基本配置和介绍
java·后端
Slow菜鸟2 小时前
Java 开发环境安装指南(一) | 目录设计规范
java
绝无仅有2 小时前
电商大厂面试题解答与场景解析(二)
后端·面试·架构
绝无仅有2 小时前
某电商大厂场景面试相关的技术文章
后端·面试·架构
BS_Li2 小时前
【Linux系统编程】进程控制
java·linux·数据库