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

Spring Boot 配置文件详解:YAML vs Properties

前言

在 Spring Boot 开发中,配置文件是应用运行的核心。无论是开发、测试还是生产环境,配置文件都起到了至关重要的作用。Spring Boot 提供了两种主流的配置文件格式:PropertiesYAML。它们各有特点,适用于不同的场景。

本文将从以下几个方面详细解析 Spring Boot 的配置文件:

  1. YAML 和 Properties 的区别与使用场景
  2. 多环境配置:管理开发、测试、生产环境的不同设置
  3. 自定义配置:使用 @Value@ConfigurationProperties 注解
  4. 配置文件优先级与外部化配置:了解配置文件的加载顺序和外部化管理

通过本文的学习,你将能够全面掌握 Spring Boot 的配置文件管理技巧,并在实际开发中灵活运用。


一、YAML 和 Properties 的区别与使用场景

1. Properties 文件

Properties 文件 是 Java 世界中最常见的配置文件格式,以其简单易用的特点广受欢迎。

  • 语法特点
    • 使用键值对的形式存储配置。
    • 每行一个配置项,键和值之间用 = 分隔。
    • 支持多行书写,使用 \ 表示续行。

示例:

# application.properties  
server.port=8080  
spring.datasource.url=jdbc:mysql://localhost:3306/mydb  

 

  • 优点
    • 简单直观,易于上手。
    • 与 Java 生态系统深度集成。
  • 缺点
    • 不支持复杂的层级结构。
    • 对于嵌套配置不够友好。
 2.YAML 文件

YAML 文件 是一种更为现代化的配置文件格式,因其简洁和强大的表达能力而备受青睐。

  • 语法特点
    • 使用缩进表示层级关系。
    • 支持多行字符串和复杂的数据结构(如列表、映射)。
    • 文件扩展名通常为 .yaml.yml

示例:

# application.yaml  
server:
  port: 8080 
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb 

 

  • 优点
    • 支持复杂的层级结构,适合嵌套配置。
    • 语法简洁,易于阅读和维护。
  • 缺点
    • 对于简单的配置项显得略显冗长。
    • 学习成本稍高于 Properties。
3.YAML 和 Properties 的对比
特性PropertiesYAML
文件扩展名.properties.yaml.yml
语法风格键值对,无层级结构使用缩进表示层级结构
适用场景简单的键值对配置复杂的嵌套配置
是否支持多行支持(使用 \ 续行)支持(自然换行)
是否支持复杂结构不支持支持(列表、映射等)
4. 如何选择?
  • 如果你的配置较为简单(如单层键值对),可以选择 Properties
  • 如果你的配置较为复杂(如嵌套结构、列表等),建议选择 YAML

二、多环境配置:管理不同环境的设置

在实际开发中,应用通常需要在多个环境中运行(如开发环境、测试环境、生产环境)。Spring Boot 提供了灵活的多环境配置解决方案。

1. 配置文件命名规范

Spring Boot 支持通过在配置文件名后添加 -profile 后缀来区分不同环境。例如:

  • application.properties :默认配置文件。
  • application-dev.properties :开发环境配置。
  • application-test.properties :测试环境配置。
  • application-prod.properties :生产环境配置。
2. 激活指定 Profile

要激活某个 Profile,可以通过以下几种方式:

  1. 通过命令行参数

    java -jar myapp.jar  --spring.profiles.active=dev  

  2 .通过系统环境变量

export SPRING_PROFILES_ACTIVE=dev 

 3.通过 application.properties 文件

spring.profiles.active=dev  

 

三、自定义配置:使用 @Value@ConfigurationProperties

除了使用 Spring Boot 提供的默认配置外,我们还可以根据需求定义自己的配置项。

1. 使用 @Value 注解

@Value 是 Spring 提供的一个注解,用于从配置文件中读取值并注入到组件中。

示例:

import org.springframework.beans.factory.annotation.Value; 
import org.springframework.stereotype.Component; 
 
@Component 
public class MyConfig {
    
    @Value("${my.custom.property}") 
    private String customProperty;
 
    // Getter and Setter methods 
}

application.properties 中定义:

my.custom.property=Hello,  World!

 

2.使用 @ConfigurationProperties 注解

@ConfigurationProperties 是 Spring Boot 提供的一个更强大的注解,适用于管理复杂的自定义配置。

import org.springframework.boot.context.properties.ConfigurationProperties; 
import org.springframework.stereotype.Component; 
 
@Component 
@ConfigurationProperties(prefix = "my.custom") 
public class MyConfig {
    
    private String property1;
    private Integer property2;
 
    // Getters and Setters 
}

application.properties 中定义:

my.custom.property1=Value1  
my.custom.property2=123  
3. 自定义配置类的优势
  • 类型安全:通过 POJO 类型进行数据绑定。
  • 文档生成:Spring Boot 可以为自定义配置生成文档。
  • 集中管理:便于管理和维护复杂的配置项。

四、配置文件优先级与外部化配置

1. 配置文件的加载顺序

Spring Boot 在加载配置文件时遵循一定的优先级规则。以下是默认的加载顺序:

  1. 命令行参数:最高优先级。
  2. 系统环境变量
  3. application.propertiesapplication.yaml 文件
  4. Profile 特定的配置文件(如 application-dev.properties
2. 配置文件的覆盖规则
  • 如果同名配置项在多个文件中出现,优先级高的文件会覆盖优先级低的文件。
  • 命令行参数和系统环境变量具有最高优先级。

 

 


http://www.kler.cn/a/527218.html

相关文章:

  • 智慧园区系统助力企业智能化升级实现管理效率与安全性全方位提升
  • 创建 priority_queue - 进阶(内置类型)c++
  • ESP32-S3模组上跑通esp32-camera(39)
  • C语言连接Mysql
  • 29. C语言 可变参数详解
  • 指针的介绍3后
  • 边缘计算与ROS结合:如何实现分布式机器人智能决策?
  • C 语言实现计算一年中指定日期是第几天 题】
  • 【Linux】软硬链接
  • 英语语法 第一天
  • 【算法应用】基于鲸鱼优化算法求解OTSU多阈值图像分割问题
  • python 之 zip 和 * 解包操作
  • 微店的Flutter混合开发组件化与工程化架构
  • SQL NOW() 函数详解
  • Day52:range()函数
  • 精准化糖尿病知识问答(LLM+机器学习预测模型)
  • ELK模块封装starter
  • 数据结构初探: 顺序表
  • Mysql的主从复制及扩展功能
  • 代发考试战报:1月22号 1月23号 CCDE考试通过
  • 深入解析JUnit中的@ClassRule注解
  • 代码随想录算法训练营第十五天| 二叉树3
  • Python-操作列表
  • 38【2进制与ascall码】
  • 今日头条公域流量引流新径:开源 AI 智能名片 2 + 1 链动模式 S2B2C 商城小程序融合之道
  • 【C++语言】卡码网语言基础课系列----2. A+B问题II