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

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

文章目录

1. 导读与文章目标

1.1 文章目标

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

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

1.2 适用读者

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

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

2.1 基本语法层级结构

2.1.1 application.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 是一种更现代、更表达式的配置格式,支持嵌套结构与列表。

示例:

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

YAML 特点:

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

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

3.1 嵌套对象表达

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

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

非常冗长,不够直观。

3.1.2 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 方式

spring.profiles.active=dev 

多环境:

application-dev.properties application-prod.properties 

4.2 YAML 方案(更简洁)

spring:profiles:active: dev 

甚至支持多配置块合并:

server:port:8000---spring:profiles: dev server:port:8001---spring:profiles: prod server:port:9001

5. 在 Spring Boot 中的加载顺序

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

5.1 官方顺序(简化版)

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 示例
@Value("${user.address.city}")privateString city;

适用于:简单值注入。

6.1.2 @ConfigurationProperties 示例

示例 YAML:

user:name: Jack age:20address:city: Shenzhen 

Java 绑定:

@ConfigurationProperties(prefix ="user")@DatapublicclassUserConfig{privateString name;privateInteger age;privateAddress address;@DatapublicstaticclassAddress{privateString city;}}

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

7.1 官方更推荐 YAML

原因:

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

7.2 但 properties 仍具价值

尤其在:

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

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

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

9. 常见坑点与最佳实践

9.1 YAML 容易踩的坑

9.1.1 缩进错误

示例(错误):

user:name: Tom 

必须是 2 个空格缩进:

user:name: Tom 
9.1.2 Tab 键禁用

YAML 不允许使用 Tab。

9.2 properties 容易踩的坑

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

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

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

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

10.2 中大型业务系统

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

10.3 配置覆盖策略

优先级顺序:

云配置 > 外部 yml > 内部 yml > properties > 默认值 

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

结束语

👨‍💻 关于我

持续学习 | 追求真我

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

感谢订阅专栏 三连文章

image-20251011155556997

掘金点击访问QiunerZEEKLOG点击访问QiunerGitHub点击访问QiunerGitee点击访问Qiuner

专栏简介
📊 一图读懂系列图文并茂,轻松理解复杂概念
📝 一文读懂系列深入浅出,全面解析技术要点
🌟持续更新保持学习,不断进步
🎯 人生经验经验分享,共同成长
你好,我是Qiuner. 为帮助别人少走弯路而写博客

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

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

如果你遇到了问题,自己没法解决,可以去我掘金评论区问。ZEEKLOG评论区和私信消息看不完 掘金消息少一点.
上一篇推荐链接
Java程序员快又扎实的学习路线点击该处自动跳转查看哦
一文读懂 AI点击该处自动跳转查看哦
一文读懂 服务器点击该处自动跳转查看哦
2024年创作回顾点击该处自动跳转查看哦
一文读懂 ESLint配置点击该处自动跳转查看哦
老鸟如何追求快捷操作电脑点击该处自动跳转查看哦
未来会写什么文章?预告链接
一文读懂 XX?点击该处自动跳转查看哦
2025年终总结点击该处自动跳转查看哦
一图读懂 XX?点击该处自动跳转查看哦

Read more

Java 大视界 -- Java+Flink CDC 构建实时数据同步系统:从 MySQL 到 Hive 全增量同步(443)

Java 大视界 -- Java+Flink CDC 构建实时数据同步系统:从 MySQL 到 Hive 全增量同步(443)

Java 大视界 -- Java+Flink CDC 构建实时数据同步系统:从 MySQL 到 Hive 全增量同步(443) * 引言: * 正文: * 一、 核心认知:Flink CDC 与全增量同步逻辑 * 1.1 Flink CDC 核心原理 * 1.1.1 与传统数据同步方案的对比(实战选型参考) * 1.2 全增量同步核心逻辑(MySQL→Hive) * 1.2.1 关键技术点(实战必关注,每个点都踩过坑) * 二、 环境准备:生产级环境配置(可直接复用) * 2.1 核心依赖配置(pom.xml)

By Ne0inhk
Redis Java 集成到 Spring Boot

Redis Java 集成到 Spring Boot

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:Redis 📚本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。 Redis Java 集成到 Spring Boot * 一、使用 Spring Boot 连接 Redis 单机 * 1.创建Spring Boot 项目 * 2.勾选相关依赖(Dependencies) * 3.界面显示 * 二、配置 Redis 服务地址 * 1.在 application.yml 中配置 * 2.映射端口号 * 三、创建 Controller

By Ne0inhk
(最新原创毕设)Java上门帮厨管理系统/03.01白嫖源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案

(最新原创毕设)Java上门帮厨管理系统/03.01白嫖源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案

摘  要 随着现代生活节奏的加快和人们对便捷、高质量餐饮服务需求的增加,上门帮厨作为一种新兴的服务模式逐渐受到欢迎。然而,传统的上门帮厨管理方式依赖于电话预约和手工记录,不仅效率低下,而且难以满足用户对服务质量透明度和个性化的需求。为此,本文提出了一个基于Spring Boot框架的临沂上门帮厨管理系统。该系统旨在通过信息化手段优化厨师与用户之间的互动流程,提高服务效率,增强用户体验,并为管理者提供有效的运营支持。 基于Spring Boot的临沂上门帮厨管理系统集成了多种功能模块,以满足不同用户群体的需求。普通用户可以通过注册登录进入系统,浏览首页展示的轮播图、菜品资讯、菜品信息推荐等信息,并进行相关操作。系统提供了菜品资讯的查看、点赞、收藏和评论功能,以及菜品信息的详情查看、评分、预约等功能。用户还可以在线提交问题反馈,查看个人账户信息并进行修改。 厨师用户可以查看订单详情,进行订单审核和回复,提交佣金提现申请,并查看提现记录。这些功能模块的设计充分考虑了厨师的实际需求,旨在帮助他们更好地管理和提升自己的服务水平。 管理员负责整个系统的运维工作,包括新注册用户的审核、菜品信

By Ne0inhk

【AI测试全栈:质量】39、Training-Serving Skew终结者:Python+Java+Vue三端联动的特征工程全链路测试实战指南

Training-Serving Skew终结者:Python+Java+Vue三端联动的特征工程全链路测试实战指南(附完整代码) 摘要 在AI生产环境中,90%的模型效果衰减并非源于算法本身,而是特征工程环节的Training-Serving Skew(训练-服务偏差)所致。 本文深度解析特征工程的三大核心测试目标(一致性、稳定性、有效性),通过Python(数据处理)、Java(分布式计算)、Vue(可视化监控)三端协同,构建企业级特征工程测试体系。涵盖电商推荐与金融风控双场景实战,提供可直接落地的完整代码实现与踩坑优化方案。 一、Training-Serving Skew:模型失效的隐形杀手 1.1 问题定义与影响 Training-Serving Skew指训练阶段与服务阶段特征数据在计算逻辑、数据格式、时间窗口、数据延迟等环节产生的系统性差异。这种偏差如同"数据寄生虫",悄然吞噬模型效果: * 案例:某视频推荐模型离线NDCG@10达0.137,上线后3周内用户

By Ne0inhk