[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-spring-bootzhongpropertiesheyml-depeizhiwenjianqubieshishenme":3},{"id":4,"title":5,"slug":6,"summary":7,"content":8,"contentHtml":9,"wordCount":10,"readingTime":11,"categoryId":12,"tags":13,"coverImage":13,"thumbnail":13,"status":14,"isTop":15,"isRecommended":15,"allowComments":15,"password":13,"viewCount":16,"likeCount":15,"commentCount":15,"seoTitle":5,"seoKeywords":17,"seoDescription":18,"source":13,"sourceUrl":13,"publishTime":19},"2005275234708549633","Spring Boot中.properties和.yml 的配置文件区别是什么？","spring-bootzhongpropertiesheyml-depeizhiwenjianqubieshishenme","在 Spring Boot 中，`application.properties` 和 `application.yml` 都是用来配置应用程序属性的配置文件，它们的功能是等价的，只是语法格式不同。以下是两者的主要区别： --- ### 1. **语法格式不同** - **`application.properties`** 使用键值对的形式（类似 Java 的 Properties 文件）： ```properties server.port=8080 spring.datasource.url=jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fmydb ``` - **`application.yml`** 使用 YAML（YAML Ain't Markup Language）格式，基于缩进表示层级结构： ```yaml server: port: 8080 spring:...","在 Spring Boot 中，`application.properties` 和 `application.yml` 都是用来配置应用程序属性的配置文件，它们的功能是等价的，只是语法格式不同。以下是两者的主要区别：\n\n---\n\n### 1. **语法格式不同**\n\n- **`application.properties`**  \n  使用键值对的形式（类似 Java 的 Properties 文件）：\n  ```properties\n  server.port=8080\n  spring.datasource.url=jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fmydb\n  ```\n\n- **`application.yml`**  \n  使用 YAML（YAML Ain't Markup Language）格式，基于缩进表示层级结构：\n  ```yaml\n  server:\n    port: 8080\n  spring:\n    datasource:\n      url: jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fmydb\n  ```\n\n---\n\n### 2. **可读性与维护性**\n\n- **YAML 更易读、更简洁**：对于嵌套配置（如 Spring Boot 中常见的多层配置），YAML 通过缩进清晰地表达层级关系。\n- **Properties 更传统、兼容性好**：适用于习惯使用 `.properties` 格式的开发者或工具。\n\n---\n\n### 3. **书写复杂度**\n\n- 对于简单配置，两者差别不大；\n- 对于复杂配置（例如列表、Map、多 profile 配置等），YAML 更加直观：\n  ```yaml\n  myapp:\n    users:\n      - name: Alice\n        role: admin\n      - name: Bob\n        role: user\n  ```\n  等价的 properties 写法会比较冗长：\n  ```properties\n  myapp.users[0].name=Alice\n  myapp.users[0].role=admin\n  myapp.users[1].name=Bob\n  myapp.users[1].role=user\n  ```\n\n---\n\n### 4. **加载优先级**\n\nSpring Boot 默认按以下顺序查找配置文件（优先级从高到低）：\n\n1. 当前目录下的 `\u002Fconfig` 子目录\n2. 当前目录\n3. classpath 下的 `\u002Fconfig` 包\n4. classpath 根目录\n\n在同一位置下，**如果同时存在 `application.properties` 和 `application.yml`，Spring Boot 会优先加载 `application.properties`**（因为内部处理顺序中 `.properties` 在 `.yml` 之前）。但通常建议只使用其中一种，避免混淆。\n\n> ⚠️ 注意：Spring Boot 2.4+ 版本对配置文件的加载行为有细微调整，推荐查阅官方文档以获取最新信息。\n\n---\n\n### 5. **特殊字符处理**\n\n- YAML 对缩进和特殊字符（如冒号、引号）敏感，格式错误会导致解析失败；\n- Properties 对格式要求较低，但不支持复杂数据结构的自然表达。\n\n---\n\n### 总结建议\n\n| 场景 | 推荐格式 |\n|------|----------|\n| 配置项少、结构简单 | `application.properties` |\n| 配置项多、有嵌套\u002F列表结构 | `application.yml` |\n| 团队已有规范 | 遵循团队约定 |\n| 需要与旧系统兼容 | `application.properties` |\n\n> ✅ 最佳实践：在一个项目中统一使用一种格式，不要混用。\n\n--- \n\n如果你刚开始使用 Spring Boot，YAML 通常是更现代、更清晰的选择。","\u003Cp data-line=\"0\">在 Spring Boot 中，\u003Ccode>application.properties\u003C\u002Fcode> 和 \u003Ccode>application.yml\u003C\u002Fcode> 都是用来配置应用程序属性的配置文件，它们的功能是等价的，只是语法格式不同。以下是两者的主要区别：\u003C\u002Fp>\n\u003Chr data-line=\"2\">\n\u003Ch3 data-line=\"4\" id=\"1. 语法格式不同\">1. \u003Cstrong>语法格式不同\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cul data-line=\"6\">\n\u003Cli data-line=\"6\">\n\u003Cp data-line=\"6\">\u003Cstrong>\u003Ccode>application.properties\u003C\u002Fcode>\u003C\u002Fstrong>\u003Cbr>\n使用键值对的形式（类似 Java 的 Properties 文件）：\u003C\u002Fp>\n\n        \u003Cdetails  data-line=\"8\" class=\"md-editor-code\" open=\"\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">properties\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-properties\" language=properties>\u003Cspan class=\"md-editor-code-block\">\u003Cspan class=\"hljs-attr\">server.port\u003C\u002Fspan>=\u003Cspan class=\"hljs-number\">8080\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">spring.datasource.url\u003C\u002Fspan>=jdbc:mysql:\u002F\u002Flocalhost:\u003Cspan class=\"hljs-number\">3306\u003C\u002Fspan>\u002Fmydb\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003C\u002Fli>\n\u003Cli data-line=\"13\">\n\u003Cp data-line=\"13\">\u003Cstrong>\u003Ccode>application.yml\u003C\u002Fcode>\u003C\u002Fstrong>\u003Cbr>\n使用 YAML（YAML Ain't Markup Language）格式，基于缩进表示层级结构：\u003C\u002Fp>\n\n        \u003Cdetails  data-line=\"15\" class=\"md-editor-code\" open=\"\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">yaml\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-yaml\" language=yaml>\u003Cspan class=\"md-editor-code-block\">\u003Cspan class=\"hljs-attr\">server:\u003C\u002Fspan>\n  \u003Cspan class=\"hljs-attr\">port:\u003C\u002Fspan> \u003Cspan class=\"hljs-number\">8080\u003C\u002Fspan>\n\u003Cspan class=\"hljs-attr\">spring:\u003C\u002Fspan>\n  \u003Cspan class=\"hljs-attr\">datasource:\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-attr\">url:\u003C\u002Fspan> \u003Cspan class=\"hljs-string\">jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fmydb\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003C\u002Fli>\n\u003C\u002Ful>\n\u003Chr data-line=\"23\">\n\u003Ch3 data-line=\"25\" id=\"2. 可读性与维护性\">2. \u003Cstrong>可读性与维护性\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cul data-line=\"27\">\n\u003Cli data-line=\"27\">\u003Cstrong>YAML 更易读、更简洁\u003C\u002Fstrong>：对于嵌套配置（如 Spring Boot 中常见的多层配置），YAML 通过缩进清晰地表达层级关系。\u003C\u002Fli>\n\u003Cli data-line=\"28\">\u003Cstrong>Properties 更传统、兼容性好\u003C\u002Fstrong>：适用于习惯使用 \u003Ccode>.properties\u003C\u002Fcode> 格式的开发者或工具。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Chr data-line=\"30\">\n\u003Ch3 data-line=\"32\" id=\"3. 书写复杂度\">3. \u003Cstrong>书写复杂度\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cul data-line=\"34\">\n\u003Cli data-line=\"34\">对于简单配置，两者差别不大；\u003C\u002Fli>\n\u003Cli data-line=\"35\">对于复杂配置（例如列表、Map、多 profile 配置等），YAML 更加直观：\n        \u003Cdetails  data-line=\"36\" class=\"md-editor-code\" open=\"\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">yaml\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-yaml\" language=yaml>\u003Cspan class=\"md-editor-code-block\">\u003Cspan class=\"hljs-attr\">myapp:\u003C\u002Fspan>\n  \u003Cspan class=\"hljs-attr\">users:\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-bullet\">-\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">name:\u003C\u002Fspan> \u003Cspan class=\"hljs-string\">Alice\u003C\u002Fspan>\n      \u003Cspan class=\"hljs-attr\">role:\u003C\u002Fspan> \u003Cspan class=\"hljs-string\">admin\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-bullet\">-\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">name:\u003C\u002Fspan> \u003Cspan class=\"hljs-string\">Bob\u003C\u002Fspan>\n      \u003Cspan class=\"hljs-attr\">role:\u003C\u002Fspan> \u003Cspan class=\"hljs-string\">user\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      等价的 properties 写法会比较冗长：\n        \u003Cdetails  data-line=\"45\" class=\"md-editor-code\" open=\"\">\n          \u003Csummary class=\"md-editor-code-head\">\n            \u003Cdiv class=\"md-editor-code-flag\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fdiv>\n            \u003Cdiv class=\"md-editor-code-action\">\n              \u003Cspan class=\"md-editor-code-lang\">properties\u003C\u002Fspan>\n              \u003Cspan class=\"md-editor-copy-button\" data-tips=\"复制代码\">复制代码\u003C\u002Fspan>\n              \n              \u003Cspan class=\"md-editor-collapse-tips\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-chevron-left md-editor-icon\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m14 16-4-4 4-4\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n            \u003C\u002Fdiv>\n          \u003C\u002Fsummary>\n          \u003Cpre>\u003Ccode class=\"language-properties\" language=properties>\u003Cspan class=\"md-editor-code-block\">myapp.users[\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>].name\u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan>Alice\nmyapp.users[\u003Cspan class=\"hljs-number\">0\u003C\u002Fspan>].role\u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan>admin\nmyapp.users[\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>].name\u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan>Bob\nmyapp.users[\u003Cspan class=\"hljs-number\">1\u003C\u002Fspan>].role\u003Cspan class=\"hljs-operator\">=\u003C\u002Fspan>\u003Cspan class=\"hljs-keyword\">user\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan rn-wrapper aria-hidden=\"true\">\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\n        \u003C\u002Fdetails>\n      \u003C\u002Fli>\n\u003C\u002Ful>\n\u003Chr data-line=\"52\">\n\u003Ch3 data-line=\"54\" id=\"4. 加载优先级\">4. \u003Cstrong>加载优先级\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cp data-line=\"56\">Spring Boot 默认按以下顺序查找配置文件（优先级从高到低）：\u003C\u002Fp>\n\u003Col data-line=\"58\">\n\u003Cli data-line=\"58\">当前目录下的 \u003Ccode>\u002Fconfig\u003C\u002Fcode> 子目录\u003C\u002Fli>\n\u003Cli data-line=\"59\">当前目录\u003C\u002Fli>\n\u003Cli data-line=\"60\">classpath 下的 \u003Ccode>\u002Fconfig\u003C\u002Fcode> 包\u003C\u002Fli>\n\u003Cli data-line=\"61\">classpath 根目录\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp data-line=\"63\">在同一位置下，\u003Cstrong>如果同时存在 \u003Ccode>application.properties\u003C\u002Fcode> 和 \u003Ccode>application.yml\u003C\u002Fcode>，Spring Boot 会优先加载 \u003Ccode>application.properties\u003C\u002Fcode>\u003C\u002Fstrong>（因为内部处理顺序中 \u003Ccode>.properties\u003C\u002Fcode> 在 \u003Ccode>.yml\u003C\u002Fcode> 之前）。但通常建议只使用其中一种，避免混淆。\u003C\u002Fp>\n\u003Cblockquote data-line=\"65\">\n\u003Cp data-line=\"65\">⚠️ 注意：Spring Boot 2.4+ 版本对配置文件的加载行为有细微调整，推荐查阅官方文档以获取最新信息。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Chr data-line=\"67\">\n\u003Ch3 data-line=\"69\" id=\"5. 特殊字符处理\">5. \u003Cstrong>特殊字符处理\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cul data-line=\"71\">\n\u003Cli data-line=\"71\">YAML 对缩进和特殊字符（如冒号、引号）敏感，格式错误会导致解析失败；\u003C\u002Fli>\n\u003Cli data-line=\"72\">Properties 对格式要求较低，但不支持复杂数据结构的自然表达。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Chr data-line=\"74\">\n\u003Ch3 data-line=\"76\" id=\"总结建议\">总结建议\u003C\u002Fh3>\n\u003Ctable data-line=\"78\">\n\u003Cthead data-line=\"78\">\n\u003Ctr data-line=\"78\">\n\u003Cth>场景\u003C\u002Fth>\n\u003Cth>推荐格式\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody data-line=\"80\">\n\u003Ctr data-line=\"80\">\n\u003Ctd>配置项少、结构简单\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>application.properties\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr data-line=\"81\">\n\u003Ctd>配置项多、有嵌套\u002F列表结构\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>application.yml\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr data-line=\"82\">\n\u003Ctd>团队已有规范\u003C\u002Ftd>\n\u003Ctd>遵循团队约定\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr data-line=\"83\">\n\u003Ctd>需要与旧系统兼容\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>application.properties\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cblockquote data-line=\"85\">\n\u003Cp data-line=\"85\">✅ 最佳实践：在一个项目中统一使用一种格式，不要混用。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Chr data-line=\"87\">\n\u003Cp data-line=\"89\">如果你刚开始使用 Spring Boot，YAML 通常是更现代、更清晰的选择。\u003C\u002Fp>\n",1734,5,"0","",2,0,19,"properties,格式,application,YAML,配置","在 Spring Boot 中，application.properties 和 application.yml 都是用来配置应用程序属性的配置文件，它们的功能是等价的，只是语法格式不同。以下是两者的主要区别：\n\n1. 语法格式不同\n\n\napplication.","2025-12-28 21:50:45"]