Spring boot 配置文件读取和yaml结构

Spring Boot中的YAML配置简介 在Spring Boot中,我们可以使用YAML(YAML Ain’t Markup Language)格式的配置文件来管理应用程序的各种配置信息。本文介绍了Spring Boot中使用YAML配置文件的基本知识,并提供了读取和绑定YAML配置的方式。通过使用YAML格式的配置文件,我们能够更加清晰和简洁地管理应用程序的各种配置信息,使得开发过程更加高效和便捷。在Spring Boot项目中,我们通常将配置信息保存在一个名为"application.yml"或"application.yaml"的文件中。 阅读详情

Spring boot 配置文件和ymal结构

源码

源码链接地址:

上一节

Spring boot Banner和icon

yaml

 yaml 简介就不多说了,说白了就是类似json结构,比json更清晰的 kv形式的;通俗易懂。

语法

  1. k: v ; 冒号后面有一个空格
  2. 使用空格缩进,表示层级关系,尽量不要使用tab
  3. 大小写敏感
  4. 驼峰表示, 如:my-name 表示字段myName
  5. '#'表示注释

ymal 中的数据结构

  1. string

普通的value即可。 略

  1. map, object

key, value 形式;
如:
family:
lover: xiaohong
father: xiaoduFather
或者行内表示:
family: {“lover”: “xiaohong”,“father”:“xiaoduFather”}

  1. list

使用 - 表示,或者使用逗号分割;
如:
hobby:
- lol
- ping pong
或者行内表示: hobby: lol,ping pong
也可以带上中括号:hobby: [lol,ping pong]

  1. date

默认格式为 yyyy/MM/dd; 如 birthday: 2010/01/01 12:00:00,或者 2010/01/01

  1. null

使用 ~ 表示; 如:age: ~

  1. 更复杂的对象,可以自行查阅,以上平常开发够用了。

示例

#对象
person:
 # string
  name: xiaodu 
   # null
  age: ~
   #date
  birthday: 200/01/01 12:00:00
  # 集合
  hobby: # 行内表示[lol,ping pong] 
    - lol
    - ping pong
   # map
  family: # 行内表示{"lover": "xiaohong","father":"xiaoduFather"} 
    lover: xiaohong
    father: xiaoduFather

Sprinsg boot 配置文件

根据profiles 读取不同的配置文件

在resources下我们创建4个配置文件, dev 开发; test 测试, prod 生产;
使用 application-{env}.yml 形式命名文件名称

在这里插入图片描述
application.yml
使用spring.profiles.active 指定配置文件

spring:
 profiles:
   active: dev

application-dev.yml, application-test.yml, application-prod.yml 分别指定不同的端口;

#dev
server:
 port: 8081
 #test
 server:
 port: 8082
 #prod
 server:
 port: 8083

当在application.yml中使用spring.profiles.active指定配置文件后,就会加载相应的配置文件信息;有助于我们根据不同的环境切换信息/
也可以在一个配置文件中进行profile的分区; 使用 三个- 进行分区

#application.yml
spring:
 profiles:
   active: test1

---
spring:
 profiles: dev1
server:
 port: 8991
---
spring:
 profiles: test1
server:
 port: 8992
---
spring:
 profiles: prod1
server:
 port: 8993

获取配置信息

配置文件信息

person:
name: xiaodu
age: ~
birthday: 200/01/01 12:00:00
hobby: #[lol,ping pong]
 - lol
 - ping pong
family: #{"lover": "xiaohong","father":"xiaoduFather"}
 lover: xiaohong
 father: xiaoduFather
通过注解获取配置文件信息

@value 获取配置信息
使用 ${key:default} 进行获取配置文件信息; 也可以通过#{} 使用SPEL 表达式进行表示和运算;冒号面跟默认值

   @Value("${person.name:xiaodu}")
   private String name;

   @Value("${person.age}")
   private Integer age;
   
// 使用#{} 进行计算;
//    @Value("#{'${person.hobby}'.split(',')}")
   private String[] hobbys;
   
// 还可以使用dateTimeFormat 进行日期的格式化
//    @DateTimeFormat(pattern = "yyyy-MM-dd")
   @Value("${person.birthday}")
   private Date birthday;

@ConfigurationProperties获取配置信息
推荐使用此方式

直接通过属性映射给配置类信息;配置类必须被spring管理;也就是一个spring bean;
推荐是使用 @EnableConfigurationProperties({UserProperties.class}) 进行; 直接在类上使用@component 也可以。

//prefix 代表前缀
@ConfigurationProperties(prefix = "person")
/*
属性名称相同,直接映射; 大小写,如“ user.my-age  映射  实体属性  myAge
*/
  private String name;
// 接收日期;可以指定格式化; 默认 yyyy/MM/dd
//    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;

    private List<String> hobby;

    private Integer age;
//  接收map
    private Map<String, String> family;

@PropertySource指定资源位置

   @PropertySource 配合@ConfigurationProperties 进行指定配置文件的位置; 
   @PropertySource 不能使用通配符,只能使用精确的位置; 
   可以使用 classpath, file, url 对资源进行具体的protocol 指定;也可以通过${} 获取配置信息指定的位置
  • classpath
@ConfigurationProperties(prefix = "person1")
@Component
@PropertySource("classpath:user.properties")
  • file
@ConfigurationProperties(prefix = "person1")
@Component
@PropertySource("file:/path/to/file.proerties")
  • url
@Component
@PropertySource("url:${myConfig.url}/config/fruits/price")
@ConfigurationProperties(prefix = "fruits")

url会进行网络请求指定路径获取配置信息;
例如下面模拟了一个接口的返回值,返回的是一个 properties 文件格式的字符串。
通过url指定该路径。

@RestController
@RequestMapping("/config")
public class PropertiesController {

    @GetMapping("/fruits/price")
    public String fruitsPrice() {
        return "fruits.apple=1.2/kg\nfruits.banana=1.5/kg";
    }

}

默认@PropertySource 指定资源位置后,使用properties 后缀的文件信息,若想使用则需要配置yaml解析
使用@propertySource 配置使用yaml
指定yamlpropertysource 的解析; DefaultPropertySourceFactory 是springboot 提供的默认的,只支持kv形式的properties文件格式

  1. 自定义 yamlPropertySourceFactory
public class YamlPropertySourceFactory extends DefaultPropertySourceFactory {

    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
        String filename = resource.getResource().getFilename();
        String sourceName = Optional.ofNullable(name).orElse(resource.getResource().getFilename());
        if (!resource.getResource().exists()) {
            return new PropertiesPropertySource(sourceName, new Properties());
        }
        if (filename.endsWith(".yaml") || filename.endsWith(".yml")) {
            YamlPropertiesFactoryBean yamlPropertiesFactoryBean = yamlPropertiesFactoryBean(resource);
            return new PropertiesPropertySource(sourceName, yamlPropertiesFactoryBean.getObject());
        }
        return super.createPropertySource(name, resource);
    }

    public YamlPropertiesFactoryBean yamlPropertiesFactoryBean(EncodedResource encodedResource) {
        YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean();
        yamlPropertiesFactoryBean.setResources(encodedResource.getResource());
        yamlPropertiesFactoryBean.afterPropertiesSet();
        return yamlPropertiesFactoryBean;
    }
}
  1. @PropertySource 中指定 factory
@ConfigurationProperties(prefix = "person2")
@Component
@PropertySource(value = "classpath:user.yaml", factory = YamlPropertySourceFactory.class)

下一节

Spring boot logging

深入Spring Boot配置文件管理与读取指南 配置文件是应用程序中不可或缺的一部分,它们允许开发者通过外部文件来定制应用程序的行为,而无需直接修改源代码。Spring Boot的配置文件是这个理念的具体实现,通过它可以实现更加灵活和高效的配置管理。如果配置项分散在配置文件的不同部分,或者你想要将相关的属性组织在一起,可以为指定不同的前缀。@ComponentSpring Cloud Config Server采用了客户端-服务器架构模式,其中Config Server扮演服务器角色,负责集中存储所有环境的配置信息。 阅读详情

相关推荐

SSL证书验证:VMware Horizon Client的安全隐患与临时解决方案

本文深入分析了VMware Horizon Client中SSL证书验证失败的安全隐患,提供了临时解决方案与长期防御策略。针对自签名证书、证书链断裂等常见问题,文章详细解析了风险成因,并给出分级响应方案,帮助企业平衡安全与效率。通过实战案例和自动化脚本,指导IT管理员构建主动防御体系,有效降低中间人攻击风险。

weixin_29290863的博客 337

springboot项目不同环境的配置读取

一、首先我知道的是,springboot项目可以使用如下3种类型配置文件,并且可以同时存在。1级: springboot-demo.jar同级目录: config/application.yml[最高)2级: springboot-demo.jar同级目录 : application.yml。四、在application.yml文件中可以读取到pom文件中的配置,可用配置当前环境。3级: classpath: config/application.yml。三、在配置文件中,可以配置如下不同的环境配置。

u010197591的专栏 2242

基于STM32的Modbus TCP多主站数据监测

Modbus TCP通信协议在STM32上实现,STM32作为服务器采集内部传感器数据,并通过ADC进行转换,存入寄存器。两个PC机作为客户端访问服务器,服务器通过Socket通信实现监听连接,将数据发送给客户端。

hyp12347的博客 4291

Springboot 加载配置文件源码分析

Springboot 加载配置文件源码分析 本文的分析是基于springboot 2.2.0.RELEASE。 本篇文章的相关源码位置:https://github.com/wbo112/blogdemo/tree/main/springbootdemo/springboot-profiles springboot加载配置文件如application.yml是通过org.springframework.boot.context.config.ConfigFileApplicationListener这个

wbo 1030

wflow模型hbv

毛管水的处理 😄 快速流的处理 K4是为了产生基流的 找到了令人激动的kenematic模块 😄

m0_46268055的博客 777

【HAL库】STM32CubeMX开发----STM32F407----ETH+LWIP----TCPclient客户端

STM32F407开发板 为TCPclient客户端,PC端 为TCPserver服务端,相互之间的发送和接收实验。

MQ0522的博客 3046

k8s-YAML配置文件

一、YAML基础   YAML是专门用来写配置文件的语言,非常简洁和强大,使用比json更方便。它实质上是一种通用的数据串行化格式。 YAML语法规则: 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tal键,只允许使用空格 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 ”#” 表示注释,从这个字符一直到行尾,都会被解析器忽略   在Kubernetes中,只需...

weixin_30726161的博客 520

A2B V1.0协议学习笔记(A2B System Specification V1.0)

A2B全称是 Automotive Audio Bus 汽车音频总线,主要是解决传统音频总线线多、线重、成本贵等问题。本文是以A2B V1.0规范为准,现在ADI又推出了A2B V2.0,物理层不兼容,采用了QPSK编码方式,后续有时间再更新。A2B总线的优点:支持1主多从的架构(最多10个子节点)支持50Mbps(具体是49.152 Mbps)的高带宽传输以及

qflook的博客 4424

史上最牛,接口自动化测试-yaml框架配置文件总结(超级详细)

yaml文件是一种配置文件类型,相比较ini,conf配置文件来说,更加的简洁,操作也更加简单,同时可以存放不同类型的数据。yaml介绍及使用1、yaml简介YAML 语言( /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。YAML 是一种非常灵活的格式,几乎是 JSON 的超集。除了支持注释、换行符分隔、多行字符串、裸字符串和更灵活的类型系统之外,YAML 也支持引用文件,以避免重复代码。2、yaml语法规则基本语法规则:大小写敏感;

大佬云集技术答疑交流群:743262921(进群暗号:222) 1544

社区版 ABAP MCP 能不能读取 SAP S/4HANA 公有云开发对象,我的判断是能试,但不能当成已被 SAP 背书的标准通道

文章摘要:当前存在多个社区项目(如mcp-abap-adt、mcp-abap-abap-adt-api等)通过包装ABAP ADT能力为MCP Server,使AI开发工具能读取ABAP对象。这些项目技术上依赖ADT HTTP API或SAP官方ADT language server,但针对SAP S/4HANA Cloud Public Edition的完整适配仍存在挑战。SAP官方已通过VS Code扩展提供ADT MCP能力,而社区方案在云环境下需遵循ABAP Cloud的严格限制,仅能访问已授权的开

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 85

深入Kafka:从SASL_PLAINTEXT到SASL_SSL的迁移之旅

本文详细介绍了如何将Apache Kafka从SASL_PLAINTEXT模式迁移到更安全的SASL_SSL模式。内容包括创建密钥库和信任库、生成证书签名请求、设置证书颁发机构、签署CSR以及修改Kafka配置文件的完整步骤。针对常见问题如SSL握手失败和循环连接尝试提供了解决方案。通过实施这些步骤,可以确保Kafka数据传输的安全性,实现客户端身份验证和加密传输。文章强调在操作过程中需仔细检查配置文件和证书信息,以确保迁移顺利完成。

m0_74337424的博客 84

04YAML配置文件

除了properties文件外,SpringBoot还支持YAML文件进行配置。YAML文件的扩展名为 .yml 或 .yaml ,它的基本要求如下: 1.大小写敏感 2.使用缩进代表层级关系 3.相同的部分只出现一次

m0_51697147的博客 2804

分享Charles抓包 显示<unknown> 解决方案 !

首先电脑上需要安装charles,然后需要设置手机上的WiFi设置,修改配置中的代理设置,把服务器的主机名设置成你电脑当前的ip地址(需要注意的是,你的代理服务器主机名的ip地址要和你当前连的ip地址的网段需要一致)。像 Charles 这样的工具,虽然功能强大,但仍然需要用户具备一定的配置和排障能力,以应对各种复杂的网络环境。通过将 Charles 的 SSL 证书正确安装到移动设备中,并在设置中启用“允许不安全的内容”选项,最终成功解决了这一问题,并准确抓取到所有请求数据。Charles 显示。

朱雀随云记的博客 8105

springboot map数据类型注入_SpringBoot之yaml配置注入

点击蓝字之后,我们就是好朋友了啦一个努力中的公众号长的好看的人都关注了YAML概述YAML(YAML Ain't Markup LanguageYAML不是一个标记语言)的缩写。在开发这种语言时,YAML的意思其实是:YAML A Markup Language(仍是一种标记语言)这种语言是以数据作为中心,而不是以标记语言为重点!标记语言:以前的配置文件;大多都使用的是 xxxx.x...

weixin_39956022的博客 1979

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring Boot 读取 YAML 配置文件

以上方法可根据需求灵活组合,@ConfigurationProperties 适合复杂配置,而 @Value 和 Environment 更适用于简单场景。YAML 支持复杂数据结构(如 List、Map),需通过 @ConfigurationProperties 映射。‌类型安全‌:建议为 @ConfigurationProperties 类添加 @Validated 注解实现校验。‌配置覆盖‌:相同属性在不同配置文件中,按加载顺序优先使用先读取的值。1、 ‌@Value 注解‌。2、 ‌外部化配置‌。

chinalog的专栏 1022

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Springboot YAML文件数据与Map互转

在目前的项目中,yaml文件作为配置文件已是很常见,例如k8s中的 pod、deployment、service等等组件的创建可通过执行yaml文件创建。 废话不多说 先上代码: import com.alibaba.fastjson.JSONObject; import org.junit.Test; import org.junit.runner.RunWith; import org...

qq_38553333的博客 4328

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

[springBoot基础] yml配置文件学习

Spring boot 项目中,yaml的配置文件越来越受欢迎,本篇文章将对文件的格式以及在SpringBoot的简单使用方法进行记录说明 1. 关于名字 YAML:YAML Ain’t Markup Language yml 和xml相比,更加简化 yml和json相比,更加优雅 2. 语法 以空格的缩进程度来控制层级关系。空格的个数不重要,对齐即视为同一层级 不能用tab空格 大小写敏感 支持字面量,对象,数组三种数据结构,也支持复合结构 字面量:字符串,布尔类型,数值,日期。字符串默认不加.

Aran_的博客 548

SpringBoot 统一配置管理

properties配置文件、YAML配置文件、多环境配置

每篇博客都不是最终版,都会随着我的学习更新 1286

打卡学习Spring Boot Day 1

下面的内容是第一天的晚上8点左右开始做的。这次就比较简单了,没有出现什么问题。在resources目录下面的.properties文件修改端口.从8080改到8081注释掉前面那句,同一级目录下新建application.yml文件,从8081改到8082同理,新建application.yaml文件,从8082改到8083若让三个都不注释,则端口为8081。因为三者之间优先级为:.properties > .yml > .yaml若三个都注释掉了,则结果是8080。

2301_79691283的博客 291

SpringBoot2 黑马B站版 -03 yaml数据格式

文章目录简介要求常见格式读取YAML数据多级属性相互引用使用Environment封装所有YAML文件数据# 使用Environment封装部分YAML文件数据 菜鸟教程:https://www.runoob.com/w3cnote/yaml-intro.html 简介 YAML:一种数据序列化格式 重视数据,轻视格式 要求 大小写敏感 每行一个数据 缩进代表层级关系 不允许tab,只允许空格 “ # ” 是注释的意思 常见格式 # 普通属性 count: china city: heil

异侠 510

Spring Boot 读取不到其他yml配置文件的值的解决方案

1.创建 import org.springframework.boot.env.YamlPropertySourceLoader; import org.springframework.core.env.PropertySource; import org.springframework.core.io.support.DefaultPropertySourceFactory; import org.springframework.core.io.support.EncodedResource; pub

qq_34294187的博客 2000

SpringBoot+YAML零侵入数据脱敏神操作!

对于数据结构简单的接口返回结果,脱敏规则格式定义为【交易号->字段->规则交易号:字段名:规则: '/^(1[3-9][0-9])\d{4}(\d{4}$)/'同时接口返回的结果中可能用有嵌套列表,那么针对这种复杂的结构就定义格式为【交易号->字段(列表)->字段->规则交易号:字段名(列表):字段名:规则: '/^(1[3-9][0-9])\d{4}(\d{4}$)/'使用这种层级结构,我们完全可以通过 Map.get("Key") 的形式获取到指定交易,指定字段的脱敏规则。

m0_73735578的博客 949

Spring Boot 如何读取 application.yml 作为配置

Spring Boot 的一大优势是 “约定优于配置” + “配置外部化”。你不需要写 XML 或硬编码参数,而是把配置放在 application.yml(或 application.properties) 中,Spring Boot 自动加载并注入到你的应用中。✅ 支持格式:.properties(键值对) 和 .yml(YAML,层次清晰,推荐)

hanker的博客 295

【Java EE】Spring Boot配置文件

文章摘要: SpringBoot配置文件解决了硬编码带来的维护问题,支持properties和yml两种格式。yml通过树形缩进结构消除重复前缀,支持对象、集合等复杂数据类型,但格式要求严格。通过@Value和@ConfigurationProperties注解可读取配置,后者适合批量绑定。案例演示了如何结合Hutool工具和yml配置实现图形验证码功能,将验证码参数抽离到配置文件统一管理。

记录了从0学习Java技术栈的日常 305

Spring配置文件

本文系统介绍了配置文件的作用、Spring Boot支持的配置文件格式及其特点。首先阐述了配置文件解决硬编码问题、实现程序灵活配置的核心价值,并以手机字体大小为例说明其应用场景。接着详细讲解了Spring Boot支持的三种配置文件格式(.properties、.yml、.yaml),包括它们的加载优先级和共存规则。最后分别深入分析了properties配置文件的键值对语法、@Value注解读取方式及其冗余信息缺点,以及yml配置文件的基本语法、引号使用规则和优缺点对比,为开发者选择合适的配置文件格式提供参

qq_71356343的博客 280

JavaEE 进阶第十四期:Spring 容器背后的配置哲学

本文介绍了JavaEE中配置文件的进阶应用,重点对比了properties和yml两种主流配置文件格式。首先阐述了配置文件的作用在于解决硬编码问题,实现配置与代码分离。然后详细讲解了properties文件的基本语法、读取方法及其存在冗余信息的缺点。接着重点介绍了yml格式的树形结构特性,包括基本语法、数据类型支持、对象/集合/Map等复杂结构的配置方法,以及使用@ConfigurationProperties注解读取配置的技巧。最后对比了两种格式的优缺点:yml具有更好的可读性、支持更多数据类型和跨语言兼

2401_85198927的博客 723
上一篇: Spring boot Banner和icon
下一篇: Spring boot logging
xiaoduup
博客等级 码龄9年 23粉丝 83原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值