当前位置: 首页 > ops >正文

Spring Boot,两种配置文件

Spring Boot 主要支持两种配置文件格式,它们允许你外部化应用程序的配置:.properties 文件和 .yml (或 .yaml) 文件。以下是关于这两种配置文件的关键知识点:


1. application.properties 文件

  • 格式: 基于键值对的纯文本文件。
    • 语法: key=value
    • 每一行通常表示一个配置项。
    • 可以使用 #! 作为注释行的开头。
  • 层级结构: 使用点 (.)符号来表示属性的层级关系。
    • 例如: spring.datasource.url=jdbc:mysql://localhost/mydb
  • 列表/数组: 可以通过在键名后使用方括号 [] 和索引来表示列表。
    • 例如:
      my.list[0]=apple
      my.list[1]=banana
      
  • 可读性: 对于简单的配置,可读性尚可。但对于复杂或嵌套层级较深的配置,可能会显得冗长且不易阅读。
  • 特殊字符: 需要对某些特殊字符进行转义 (例如,:= 在值中出现时)。
  • 编码: 默认使用 ISO-8859-1 编码,如果需要使用其他编码(如UTF-8以支持中文),需要IDE或编辑器正确处理。

2. application.yml (或 application.yaml) 文件

  • 格式: YAML (YAML Ain’t Markup Language),是一种人类可读的数据序列化标准。
    • 语法: 使用缩进来表示层级关系和结构(通常是2个空格,不允许使用制表符 Tab)。
    • 键值对使用冒号 (:) 分隔:key: value (冒号后通常有一个空格)。
  • 层级结构: 通过缩进自然地表达层级。
    • 例如:
      spring:datasource:url: jdbc:mysql://localhost/mydb
      
  • 列表/数组: 使用连字符 (-) 开头表示列表项。
    • 例如:
      my:list:- apple- banana
      
    • 也可以内联表示: my.anotherlist: [orange, grape]
  • 可读性: 对于复杂和嵌套的配置数据,YAML 通常比 .properties 文件更简洁、更易读。
  • 数据类型: 更直观地支持布尔值 (true/false), 数字, 字符串 (通常不需要引号,除非包含特殊字符或为了清晰)。
  • 多文档支持: 一个 YAML 文件可以通过 --- 分隔符包含多个文档,这在Spring Boot中常用于定义不同Profile的配置于同一个文件中。

通用关键知识点 (适用于两者)

  • 默认文件名: Spring Boot 会自动加载位于 src/main/resources 目录下的 application.propertiesapplication.yml 文件。
  • 加载优先级:
    • 如果在同一目录下同时存在 application.propertiesapplication.yml.properties 文件中的配置会覆盖 .yml 文件中的配置
    • Spring Boot 有一个详细的外部化配置加载顺序(包括命令行参数、环境变量、不同目录下的配置文件等),src/main/resources 下的这些文件是其中的一部分。
  • Spring Profiles:
    • 两种格式都支持通过特定的命名约定为不同的环境(如开发、测试、生产)定义不同的配置。
      • .properties: application-{profile}.properties (例如: application-dev.properties)
      • .yml: application-{profile}.yml (例如: application-prod.yml)
      • 也可以在单个 application.yml 文件中使用 --- 分隔并结合 spring.config.activate.on-profile (较新版本) 或 spring.profiles (较旧版本,不推荐用于多文档激活) 来指定不同profile的配置块。
    • 通过 spring.profiles.active 属性来激活一个或多个profile。
  • 属性覆盖: 高优先级的配置源可以覆盖低优先级的配置源。例如,命令行参数可以覆盖配置文件中的属性。
  • 占位符 (Placeholders): 可以在配置文件中使用 ${...} 形式的占位符来引用其他属性的值,或者系统属性、环境变量等。
    • 例如: app.description=${app.name} is a Spring Boot application
  • 配置绑定 (@ConfigurationProperties, @Value):
    • Spring Boot 提供了强大的机制将配置文件中的属性值绑定到Java对象的字段上。
      • @Value("${my.property}") 用于注入单个属性值。
      • @ConfigurationProperties(prefix = "my.config") 用于将一组属性绑定到一个POJO类。
  • Relaxed Binding (宽松绑定): Spring Boot 在将环境变量或配置文件中的属性绑定到 @ConfigurationProperties Bean时,支持多种命名方式的匹配 (例如,my.property-name 可以匹配 MY_PROPERTY_NAME 环境变量或 myPropertyName Java Bean属性)。
  • 位置: 除了 src/main/resources,Spring Boot 还会从其他位置加载配置文件,例如:
    • 当前目录下的 /config 子目录
    • 当前目录
    • 类路径下的 /config
    • 类路径根目录 (src/main/resources)

选择与总结

  • 简洁性与复杂配置: YAML 通常因其在处理复杂、层级化配置时的简洁性和可读性而受到青睐。
  • 团队偏好: 选择哪种格式很多时候取决于团队的熟悉程度和偏好。
  • Spring Boot的灵活性: Spring Boot 对两种格式都提供了一流的支持,可以根据项目需求灵活选择或甚至混合使用(尽管不常见)。

理解这些关键点有助于更有效地管理和维护Spring Boot应用程序的配置。

http://www.xdnf.cn/news/10367.html

相关文章:

  • LeetCode 39.组合总和:回溯法与剪枝优化的完美结合
  • CCPC dongbei 2025 F
  • 组件化:软件工程化的基础
  • 接口安全SOAPOpenAPIRESTful分类特征导入项目联动检测
  • 树莓派3B小练习
  • IT技术文章汇总
  • 美业+智能体,解锁行业转化新密码(2/6)
  • 大白话 Seata 分布式事务浅析,详解TCC模式
  • 腾讯位置商业授权行政区划开发指南
  • Codeforces Round 1028 (Div. 2) B. Gellyfish and Baby‘s Breath
  • Nginx反向代理
  • NodeJS全栈开发面试题讲解——P12高性能场景题
  • Chorme如何对于youtube视频进行画中画背景播放?
  • 多模态AI的企业应用场景:视觉+语言模型的商业价值挖掘
  • 8天Python从入门到精通【itheima】-62~63
  • 结合源码分析Redis的内存回收和内存淘汰机制,LRU和LFU是如何进行计算的?
  • 深度学习|pytorch基本运算-乘除法和幂运算
  • 初识PS(Photoshop)
  • 【Oracle】安装单实例
  • 【Go】2、Go语言实战
  • python打卡day42@浙大疏锦行
  • 动态库导出符号与extern “C“
  • 2025年05月总结及随笔之家电询价及以旧换新
  • 剪枝中的 `break` 与 `return` 区别详解
  • APM32主控键盘全功能开发实战教程:软件部分
  • 【论文解读】Deformable DETR | Deformable Transformers for End-to-End Object Detection
  • 题单:最大公约数(辗转相除法)
  • 安全漏洞修复导致SpringBoot2.7与Springfox不兼容
  • 爬虫工具链的详细分类解析
  • 力扣刷题Day 66:分割回文串(131)