Spring Boot 之三大配置文件.properties、.yml、.yaml 及其优先级解析

Spring Boot 的强大之处在于其高度可配置性,允许开发者根据不同环境和需求定制应用程序的行为。而这一切的核心便是配置文件。Spring Boot 支持多种配置文件格式,其中最常用的三种是 .properties、.yml 和 .yaml。

1. .properties:传统方式

.properties 文件是 Java 的传统配置文件格式,采用键值对结构,简单易懂。虽然语法简单,但对于复杂的配置结构,容易显得冗长且难以维护。

XML 复制代码
# 服务器配置
server.port=8080
server.servlet.context-path=/myapp

# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# 日志配置
logging.level.root=INFO
logging.file.name=myapp.log

2. .yml 和 .yaml:新兴方式

YAML (YAML Ain't Markup Language) 以其简洁、易读的特性,成为现代配置文件的宠儿。.yml 和 .yaml 在 Spring Boot 中等效,都代表 YAML 格式。YAML 使用缩进和冒号来表示层级关系,避免了 .properties 文件中大量的重复键名。

XML 复制代码
# 服务器配置
server:
  port: 8080
  servlet:
    context-path: /myapp

# 数据库配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver

# 日志配置
logging:
  level:
    root: INFO
  file:
    name: myapp.log

YAML 的优势:

  • 简洁易读: 使用缩进代替括号,结构清晰,易于理解和维护。

  • 强大的表达能力: 支持列表、Map 等复杂数据结构,配置更加灵活。

  • 与其他语言兼容性好: YAML 被广泛用于各种编程语言和工具。

3. 配置文件优先级

Spring Boot 加载配置文件的优先级顺序至关重要,避免配置冲突,确保应用行为符合预期。

以下是从高到低的优先级顺序:

  • 命令行参数: --server.port=8081 (最高优先级)

  • Java 系统属性: -Dserver.port=8081

  • 操作系统环境变量

  • Jar 包外的配置文件:

    • config/application.properties (or .yml/.yaml)

    • application.properties (or .yml/.yaml)

  • Jar 包内的配置文件:

    • BOOT-INF/classes/config/application.properties (or .yml/.yaml)

    • BOOT-INF/classes/application.properties (or .yml/.yaml)

  • @PropertySource 注解: 通过 @PropertySource 注解加载的配置文件。

示例:优先级演示

假设 application.properties 中 server.port=8080,application-dev.yml 中 server.port=8081,命令行参数 --server.port=8082,激活 dev profile。最终端口号将是 8082,因为命令行参数优先级最高。

4. 多环境配置

Spring Boot 提供了强大的多环境配置机制,方便在不同环境(开发、测试、生产等)使用不同的配置。

  • 基于 Profile 的配置文件: application-{profile}.properties 或 application-{profile}.yml (例如:application-dev.yml, application-prod.yml)。

  • spring.profiles.active 属性: 在 application.properties 或 application.yml 中设置 spring.profiles.active 属性来激活特定的 profile。

XML 复制代码
# application.yml
spring:
  profiles:
    active: dev # 激活 dev profile

5. 示例

一般情况下,会有两个.yml文件,上边是以引用的方式声明,下边则是对应的属性值,这样写的好处是,能够对于配置信息一目了然,便于开发。

总结

Spring Boot 的配置文件机制灵活而强大,.properties、.yml 和 .yaml 提供了多种选择。理解它们的特性、优先级和多环境配置,并结合最佳实践,可以让你更好地管理应用配置,提高开发效率和代码质量。 感谢各位看官的观看,下期见,谢谢~

相关推荐
IT_陈寒2 分钟前
Python的列表推导式用不好真的会爆内存你知道吗
前端·人工智能·后端
Wang's Blog5 分钟前
Java 项目实战: 交友项目 - 圈子互动章总结与自检清单
java·bootstrap·交友
xyouyuweizhu41 分钟前
字节流与字符流:Java IO 的两条主线该怎么选
java·开发语言·python
代码方舟1 小时前
零信任架构实战:基于天远人企关联构建自动化供应链核心企业关联穿透与利益冲突审查网关
java·人工智能·架构·自动化
摸爬滚打的小李2 小时前
TomCat
后端
liyi_hz20082 小时前
O2OA(翱途) V10.1 即将发布|功能再升级,安全再加固,协同更高效!
java·javascript·windows·开源软件
骑着蜗牛撵大象3272 小时前
AI Agent 工程化开发实战(三):用 StateGraph 给智能体搭一条可回放的状态流水线
java·开发语言·jvm·ai·状态管理·langgraph·stategraph
itmigrate2 小时前
Rust 里的所有权误区:不是不写 clone 就叫高性能
开发语言·后端·rust
Brilliantwxx2 小时前
【Linux】 文件访问与路径解析:目录、文件名、dentry、路径缓冲与 dcache 全解析
linux·运维·服务器·开发语言·spring
码事漫谈2 小时前
Deepseek v5 来了
后端