05-SpringBoot中yaml文件的语法格式,在程序中读取yaml文件中数据的方式,yaml文件中引用数据的方式

news2024/11/22 12:17:56

yaml文件格式

语法格式

YAML(YAML Ain't Markup Language)是一种数据序列化格式 , 具有容易阅读、容易与脚本语言交互、以数据为核心即重数据轻格式的特点

  • YAML数据常见的文件扩展名有yml格式(主流)和yaml格式两种

YAML文件的语法格式: 属性层级关系使用多行和缩进描述(同层级左侧对齐),每行结尾使用冒号结束, 属性值前面添加空格(只允许使用空格即不允许使用Tab键)

  • YAML文件对大小写敏感 , 使用#号表示注释
boolean: TRUE  						#TRUE,true,True,FALSE,false,False均可
float: 3.14    						#6.8523015e+5  #支持科学计数法
int: 123       						#0b1010_0111_0100_1010_1110    #支持二进制、八进制、十六进制
null: ~        						#使用~表示null
string: HelloWorld      			#字符串可以直接书写
string2: "Hello World"  			#可以使用双引号包裹特殊字符
date: 2018-02-17        			#日期必须使用yyyy-MM-dd格式
datetime: 2018-02-17T15:02:31+08:00 #时间和日期之间使用T连接,最后使用+代表时区

在书写字符串时,如果属性值中包含特殊字符如转义字符,此时可以将数据字符串使用双引号包裹起来表示作为字符解析(默认不做处理)

lesson: "Spring\tboot\nlesson"

yaml格式表示数组: 在属性名书写位置的下方使用-作为数据开始符号(要与数据间使用空格分隔),一个-号对应数组的一个元素

  • 数组书写缩略格式: 属性名: [数组元素]
  • 对象数组缩略格式: 属性名: [{},{}]
enterprise:
	name: itcast
    age: 16
    subject:
    	- Java
        - 前端
        - 大数据
#数组书写缩略格式
likes: [王者荣耀,刺激战场]		
#对象数组格式一
users:							 
  - name: Tom
   	age: 4
  - name: Jerry
    age: 5
#对象数组格式二
users:							 
  -  
    name: Tom
    age: 4
  -   
    name: Jerry
    age: 5	
#对象数组缩略格式
users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ]	

读取yaml文件数据的三种方式

yaml文件就是专门用来定义数据的, 这些数据大部分是给SpringBoot框架内部使用,当然我们自己也可以配置一些数据自己使用

读取单一数据

属性名引用方式: 先使用${一级属性名.二级属性名……}读取yaml文件中定义的数据,然后使用@Value注解把读取的值注入到Bean的属性上

  • 缺点: 如果yaml文件中定义的数据量过大,需要在Bean中定义很多属性接收数据读取到的数据

在这里插入图片描述

读取全部数据

对象封装的方式: 先声明一个Environment对象用来封装yaml文件中的所有数据,然后使用@Autowired注解把yaml文件中的数据注入到Environment对象中

  • 通过Environment的getProperties("一级属性名.二级属性名……")方法从Environment对象中获取yaml文件中对应的数据
  • 缺点: 每次拿数据都要调用Environment对象的getProperties()方法比较繁琐

在这里插入图片描述

读取对象数据

Bean对象封装的方式: 首先向Spring容器中注册一个Bean用来封装yaml中的一组数据 ,然后使用@ConfigurationProperties注解的prefix属性指定读取yaml文件中的配置属性前缀,该前缀下的所有配置属性会封装到这个Bean对象中,默认按照配置属性名和Bean对象的属性名的映射关系进行封装

在这里插入图片描述

需求: 封装yaml配置文件中datasource配置项的相关属性

datasource:
 driver-class-name: com.mysql.cj.jdbc.Driver
 url: jdbc:mysql://localhost:3306/ssm db?serverTimezone=UTC
 username: root
 password: root
@Component
// 封装yaml文件中配置项前缀为datasource下的相关数据
@ConfigurationProperties(prefix ="datasource")
public class DataSource {}
private String driverClassName;
private String url;
private String userName;
private String password;
}

yaml文件中的数据引用

当你在编写yaml数据时, 如果发现很多个配置项都具有相同的目录前缀 ,此时你可以先在yaml文件中定义一个配置属性并指定数据,然后使用${属性名}方式引用配置属性的值

center:
 dataDir: D:/usr/local/fire/data
 tmpDir: D:/usr/local/fire/tmp
 logDir: D:/usr/local/fire/log
 msgDir: D:/usr/local/fire/msgDir

#使用${属性名}方式引用属性值
baseDir: /usr/local/fire
center:
    dataDir: ${baseDir}/data
    tmpDir: ${baseDir}/tmp
    logDir: ${baseDir}/log
    msgDir: ${baseDir}/msgDir

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1178876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十一章《搞懂算法:聚类是怎么回事》笔记

聚类是机器学习中一种重要的无监督算法,可以将数据点归结为一系列的特定组合。归为一类的数据点具有相同的特性,而不同类别的数据点则具有各不相同的属性。 11.1 聚类算法介绍 人们将物理或抽象对象的集合分成由类似 的对象组成的多个类的过程被称为聚…

使用IDEA让文本对比不在变的困难

文章目录 前言操作1、IDEA与电脑磁盘任意文件的比较2、项目内部的文件比较3、剪切板比较4、IDEA本地历史比较5、IDEA版本历史对比 前言 在日常实际开发当中我们常常会对一些代码或内容进行比对查看是否有差异,这个时候不需要借用第三方比对插件,在IDEA中…

ubuntu 20.04 server安装

ubuntu 20.04 server安装 ubuntu-20.04.6-live-server-amd64.iso 安装 安装ubuntu20.04 TLS系统后,开机卡在“A start job is running for wait for network to be Configured”等待连接两分多钟。 cd /etc/systemd/system/network-online.target.wants/在[Servi…

【UE4】UE编辑器乱码问题

环境:UE4.27、vs2019 如何解决 问题原因,UE的编码默认是UTF-8,VS的默认编码是GBK 通过"高级保存选项" 直接修改VS的 .h头文件 的 编码 为 UTF-8 步骤1. 步骤2. 修改编码后,从新编译,然后就可以解决编辑器…

Linux基础环境开发工具的使用(二):动静态库的理解,make,makefile

Linux基础环境开发工具的使用[二] 一.动静态库的初步理解1.库的作用2.Linux和Windows中库的后缀名3.如何在Linux中看一个的库名字4.Linux中和Windows平台怎样支持开发的?5.动静态库的概念6.动静态库的优缺点与补充7.代码验证 二.make,makefile1.功能2.基本语法1.快速使用2.依赖…

SV-704LW 无线WIFI网络音柱

SV-704LW 无线WIFI网络音柱(工业级) 一、描述 SV-704LW是深圳锐科达电子有限公司的一款壁挂式WIFI无线网络音柱,通过WIFI无线接入到WIFI覆盖的网络中,可将网络音源通过自带的功放和喇叭输出播放,其采用防水设计,功率可以从30W到6…

品牌如何长期占领小红书市场,小红书投放复盘怎么规划?

想要实现产品种草与品牌营销,达人投放成了很多品牌的选择。然而随着达人协助成本的水涨船高,提高达人投放结果,就变得迫在眉睫。今天我们将为大家分享下,品牌如何长期占领小红书市场,小红书投放复盘怎么规划&#xff1…

找不到x3daudio1_7.dll的解决方法,快速修复x3daudio1_7.dll缺失问题

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“找不到x3daudio1_7.dll”。这个错误提示通常出现在运行某些程序或游戏时,这个文件是与音频设备相关的动态链接库文件,如果缺失或损坏,可能会导致软件游戏…

RabbitMQ(高级特性):限流

消费端限流 在rabbitmq中,使用消费端限流必须开启手动签收信息 过MQ可以对请求进行“削峰填谷”,即通过消费端限流的方式限制消息的拉取速度,达到保护消费端的目的。 生产者批量发送消息: Test public void testSendBatch() {…

聊聊 Python 的单元测试框架:unittest!

前言 说到 Python 的单元测试框架,想必接触过 Python 的朋友脑袋里第一个想到的就是 unittest。 的确,作为 Python 的标准库,它很优秀,并被广泛用于各个项目。但你知道吗?其实在 Python 众多项目中,主流的…

【SQL篇】一、Flink动态表与流的关系以及DDL语法

文章目录 1、启动SQL客户端2、SQL客户端常用配置3、动态表和持续查询4、将流转为动态表5、用SQL持续查询6、动态表转为流7、时间属性8、DDL-数据库相关9、DDL-表相关 1、启动SQL客户端 启动Flink(基于yarn-session模式为例): /opt/module/f…

PubDef:使用公共模型防御迁移攻击

对抗性攻击对机器学习系统的可靠性和安全性构成了严重威胁。通过对输入进行微小的变动,攻击者就可以导致模型生成完全错误的输出。防御这种攻击是一个很活跃的研究领域,但大多数提议的防御措施都存在重大的缺点。 这篇来自加州大学伯克利分校研究人员的…

全光谱大面积氙光灯太阳光模拟器老化测试

氙灯光源太阳光模拟器广泛应用于光解水产氢、光化学催化、二氧化碳制甲醇、光化学合成、光降解污染物、 水污染处理、生物光照,光学检测、太阳能电池研究、荧光材料测试(透射、反射、吸收) 太阳能电池特性测试,光热转化,光电材料特性测试,生物…

Docker Compose安装milvus向量数据库单机版-milvus基本操作

目录 安装Ubuntu 22.04 LTS在power shell启动milvus容器安装docker desktop下载yaml文件启动milvus容器Milvus管理软件Attu python连接milvus配置下载wget示例导入必要的模块和类与Milvus数据库建立连接创建名为"hello_milvus"的Milvus数据表插入数据创建索引基于向量…

docker容器技术基础入门

docker容器技术基础入门 容器(Container) 容器是一种基础工具;泛指任何可以用于容纳其他物品的工具,可以部分或完全封闭,被用于容纳、储存、运输物品;物体可以被放置在容器中,而容器则可以保护内容物;容器…

AVL树性质和实现

AVL树 AVL是两名俄罗斯数学家的名字,以此纪念 与二叉搜索树的区别 AVL树在二叉搜索树的基础上增加了新的限制:需要时刻保证每个树中每个结点的左右子树高度之差的绝对值不超过1 因此,当向树中插入新结点后,即可降低树的高度&…

数据结构:AVL树的实现和全部图解

文章目录 为什么要有AVL树什么是AVL树AVL树的实现元素的插入平衡因子的更新AVL树的旋转 AVL树的检查完整实现 本篇总结的是AVL树中的全部内容,配有详细的图解过程 为什么要有AVL树 前面对map/multimap/set/multiset进行了简单的介绍,在其文档介绍中发现…

计算机毕业设计java+springboot+vue的旅游攻略平台

项目介绍 本系统结合计算机系统的结构、概念、模型、原理、方法,在计算机各种优势的情况下,采用JAVA语言,结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。员工管理系统主要包括个人中心、用户管理、攻略管理、审核信息管理、积分…

Go 接口-契约介绍

Go 接口-契约介绍 文章目录 Go 接口-契约介绍一、接口基本介绍1.1 接口类型介绍1.2 为什么要使用接口1.3 面向接口编程1.4 接口的定义 二、空接口2.1 空接口的定义2.2 空接口的应用2.2.1 空接口作为函数的参数2.2.2 空接口作为map的值 2.3 接口类型变量2.4 类型断言 三、尽量定…

Day22力扣打卡

打卡记录 替换子串得到平衡字符串(滑动窗口) 链接 由于是以后统计替换的子串,不可以直接使用hash表统计的每个次数大于 n / 4 的字符,再将其次数减去平衡数来得到答案,根据字符串的连贯性,使用 滑动窗口 …