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 提供了多种选择。理解它们的特性、优先级和多环境配置,并结合最佳实践,可以让你更好地管理应用配置,提高开发效率和代码质量。 感谢各位看官的观看,下期见,谢谢~

相关推荐
萧瑟余晖6 小时前
Spring Boot Starter机制与自定义详解
spring boot
她的男孩6 小时前
分片上传的大文件人人可下载:文件模块 isPrivate 在合并时被抹成 false,另有 4 个静默坑
java·后端·架构
SWAGGY..6 小时前
【C++进阶】:(7)红黑树的原理与 C++ 实现:结构设计、插入调整及性质验证
android·java·开发语言·c++·算法
颜进强6 小时前
18 · NestJS动态模块与 forRoot:`imports: [ConfigModule.forRoot({...})]` 到底在 import 什么
前端·后端·ai编程
xn71336 小时前
Personal AI Agent 架构实战:Memory、权限、跨 App 与本地/云端设计
人工智能·后端·agent
Wang's Blog6 小时前
Java框架 SpringCloud 快速入门: Eureka 服务发现与服务名调用改造
java·spring cloud·eureka
夕除6 小时前
redis--OpenResty
java·redis
Wang's Blog7 小时前
Java框架 SpringCloud 快速入门: Eureka 注册中心原理分析
java·spring cloud·eureka
谢亮_vipxieliang7 小时前
Go defer、panic与recover核心知识点
开发语言·后端·golang
她说彩礼65万7 小时前
C语言 assert
java·linux·c语言