SpringBoot框架学习笔记(四):yaml 介绍及其使用

1 yaml 介绍

百度百科:YAML 是 “YAML Ain't a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),是为了强调这种语言以数据作为中心,而不是以标记语言为中心,而用反向缩略语重命名

解读如下

  • YAML 以数据为中心,而不是以标记语言为重点
  • YAML 仍然是一种标记语言,但是和传统的标记语言不一样,是以数据为中心的标记语言
  • YAML 非常适合用来做以数据为中心的配置文件(springboot:application.yml)

2 使用文档

官方文档(英文): The Official YAML Web Site

java操作yaml文档(中文):java操作yaml文件 - strongmore - 博客园 (cnblogs.com)

3 yaml基本语法

  • 形式为 key: value(:号后面有空格)
  • 区分大小写
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。(有些地方也识别tab,推荐使用空格)
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • #表示注释,从这个字符一直到行尾,都会被解析器忽略
  • 字符串默认不用加引号,包含空格或特殊字符必须加引号,单引号或双引号都可以

4 数据类型

4.1 字面量

字面量:单个的,不可再分的值。字符串、布尔值、整数、浮点数、Null、时间 

举例:

字符串

userId: S123
username: "lisi"
password: '123456'
province: 山东
city: "济南 : ss"

布尔值

success: true

 整数

age: 13

浮点数 

weight: 75.5

Null 

gender: ~

时间  (时间使用ISO8601标准 ISO8601)

createDate: 2001-12-14T21:59:43.10+05     

4.2 对象

对象:键值对的集合

行内写法:

k: {k1: v1,k2: v2,k3: v3}

 多行写法:

k: k1: v1k2: v2k3: v3

举例:

写在一行

address: {province: 山东, city: 济南}

写在多行

address:province: 山东city: 济南

 4.3 数值

数值:一组按次序排列的值

行内写法:

k: [v1,v2,v3]

多行写法

k: - v1- v2- v3

举例:

写在一行

hobbyList: [游泳, 跑步]

写在多行 

hobbyList:- 游泳- 跑步

5 yaml应用实例

需求说明:使用yaml配置文件 和 JavaBean 进行数据绑定,体会yaml使用方式

(1)创建一个新的SpringBoot项目-configuration

(2)在 pom.xml 文件中加入以下依赖

<!-- 导入 springboot 父工程,规定的写法 -->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.3</version>
</parent>
<dependencies><!-- 导入 web 项目场景启动器,会自动导入和 web 开发相关依赖,非常方便 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version></dependency>
</dependencies>

(3)在src/main/java目录下创建包 com.springboot.bean,在bean包下创建实体类 Car.java

package com.springboot.bean;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;@NoArgsConstructor
@AllArgsConstructor
@Data
@Component
public class Car {private String name;private Double price;
}

(4)(核心)在包 bean 下创建实体新的实体类 Monster.java

说明:在类上加上注解 @ConfigurationProperties 即可绑定yaml文件中的值,前缀为键值对中的 key

package com.springboot.bean;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.*;@NoArgsConstructor
@AllArgsConstructor
@Data
@Component
// 使用@ConfigurationProperties 即可绑定yaml文件中的值,前缀为键值对中的 key
@ConfigurationProperties(prefix = "monster")
public class Monster {private Integer id;private String name;private Integer age;private Boolean isMarried;private Date birth;private Car car;private String[] skill;private List<String> hobby;private Map<String, String> wife;private Set<Double> salaries;private Map<String, List<Car>> cars;
}

(5)在包 com.springboot 下创建软件包 controller,在controller包下创建 HiController.java

package com.springboot.controller;import com.springboot.bean.Monster;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;// @RestController = @Controller+ @ResponseBody
@RestController
public class HiController {@Resourceprivate Monster monster;@RequestMapping("/monster")public Monster monster(){return monster;}}

(6) (核心)在resources 目录下创建yaml文件 application.yml。文件后缀为 yaml 、yml 均可

monster:id: 100name: 牛魔王age: 500isMarried: truebirth: 2000/11/11car: {name: 宝马, price: 200000}skill:- 芭蕉扇- 牛魔王hobby: [喝酒,吃肉]wife:no1: 玉面狐狸no2: 铁扇公主salaries: [20000,30000]cars:# key不能为中文group1:- {name: 宝马, price: 400000}- {name: 奔驰, price: 300000}group2:- {name: 迈巴赫, price: 300000}- {name: 奥迪, price: 300000}

 (7)在包 com.springboot 下创建主程序Application.java

package com.springboot;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

(8)启动主程序,在浏览器输入 http://localhost:8080/monster 进行测试,效果如下

测试完成!yaml 文件中的数据成功绑定到bean中 

6 yaml使用细节

如果application.properties 和 application.yml 有相同的前缀值绑定,则application.properties优先级高

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

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

相关文章

电流测量分流电阻

电流测量分流电阻 测量电流的设备称为安培计。大多数现代安培计测量已知电阻的精密电阻上的电压降。电流的计算使用欧姆定律&#xff1a;我五R 大多数电流表都内置电阻器来测量电流。但是&#xff0c;当电流对于电流表来说太高时&#xff0c;需要不同的设置。解决方案是将电流…

使用 Flask 3 搭建问答平台(三):注册页面模板渲染

前言 前端文件下载 链接https://pan.baidu.com/s/1Ju5hhhhy5pcUMM7VS3S5YA?pwd6666%C2%A0 知识点 1. 在路由中渲染前端页面 2. 使用 JinJa 2 模板实现前端代码复用 一、auth.py from flask import render_templatebp.route(/register, methods[GET]) def register():re…

= null 和 is null;SQL中关于NULL处理的4个陷阱;三值逻辑

一、概述 1、NULL参与的所有的比较和算术运算符(>,,<,<>,<,>,,-,*,/) 结果为unknown&#xff1b; 2、unknown的逻辑运算(AND、OR、NOT&#xff09;遵循三值运算的真值表&#xff1b; 3、如果运算结果直接返回用户&#xff0c;使用NULL来标识unknown 4、如…

IAR嵌入式开发解决方案已全面支持芯科集成CX3288系列车规RISC-V MCU,共同推动汽车高品质应用的安全开发

中国上海&#xff0c;2024年7月16日 — 全球领先的嵌入式系统开发软件解决方案供应商IAR与芯科集成电路&#xff08;以下简称“芯科集成”&#xff09;联合宣布&#xff0c;最新版本IAR Embedded Workbench for RISC-V 3.30.2功能安全版已全面支持芯科集成CX3288系列车规RISC-V…

目标检测IOU和NMS详解

1. 目标检测中两个重要的概念:IOU和NMS 1, 具体来说&#xff0c;它是两边界框相交部分面积与相并部分面积之比&#xff0c;如下所示&#xff1a; 2.原理 这里详细解释一下计算的原理&#xff1a; 一般来说我们给定框的坐标有两种形式&#xff1a; [x,y,w,h] (或者说是[x,y,h,…

windows 11 PC查询连接过的wlan密码

1:管理员打开cmd 2:输入netsh wlan show profiles 3:netsh wlan show profiles Shw2024-5G keyclear 密码关键内容&#xff1a;12345678

全时守护,无死角监测:重点海域渔港视频AI智能监管方案

一、方案背景 随着海洋经济的快速发展和海洋资源的日益紧缺&#xff0c;对重点海域渔港进行有效监控和管理显得尤为重要。视频监控作为一种高效、实时的管理手段&#xff0c;已成为渔港管理中不可或缺的一部分。当前&#xff0c;我国海域面积广阔&#xff0c;渔港众多&#xf…

Token Labeling(NeurIPS 2021, ByteDance)论文解读

paper&#xff1a;All Tokens Matter: Token Labeling for Training Better Vision Transformers official implementation&#xff1a;https://github.com/zihangJiang/TokenLabeling 出发点 ViTs的局限性&#xff1a;尽管ViTs在捕捉长距离依赖方面表现出色&#xff0c; 但…

Postman导出excel文件

0 写在前面 在我们后端写接口的时候&#xff0c;前端页面还没有出来&#xff0c;我们就得先接口测试&#xff0c;在此记录下如何使用postman测试导出excel接口。 如果不会使用接口传参可以看我这篇博客如何使用Postman 1 方法一 2 方法二 3 写在末尾 虽然在代码中写入文件名…

Linux 推出 Redis 分支 Valkey

Valkey——一个开源高性能键值存储 Redis 公司宣布更改开源许可之后&#xff0c;社区里出现了多个 Redis 分支&#xff0c;如 Redict、Valkey 等 2024 年 3 月 21 日&#xff0c;Redis 背后企业 Redis 的 CEO Rowan Trollope 宣布&#xff0c;该项目的许可证类型将从原本的 BS…

VLAN 划分案例详解

vlan 的应用在网络项目中是非常广泛的&#xff0c;基本上大部分的项目都需要划分 vlan&#xff0c;这里从基础的 vlan 的知识开始&#xff0c;了解 vlan 的划分原理。 为什么需要 vlan&#xff1a; 1、什么是 VLAN&#xff1f; VLAN&#xff08;Virtual LAN&#xff09;&…

SpringCloud------Sentinel(微服务保护)

目录 雪崩问题 处理方式!!!技术选型 Sentinel 启动命令使用步骤引入依赖配置控制台地址 访问微服务触发监控 限流规则------故障预防流控模式流控效果 FeignClient整合Sentinel线程隔离-------故障处理线程池隔离和信号量隔离​编辑 两种方式优缺点设置方式 熔断降级-----…

【JavaEE-多线程背景-线程等待-线程的六种状态-线程安全问题-详解】

&#x1f308;个人主页&#xff1a;SKY-30 ⛅个人推荐&#xff1a;基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 &…

高性能、安全、低碳绿色的趋势下,锐捷网络发布三擎云办公解决方案 3.0

桌面虚拟化作为云时代的主流和热门技术&#xff0c;已经取得了广泛应用。随着生成式 AI 爆炸式发展&#xff0c;CSDN 看到&#xff0c;人工智能正在引发计算、开发、交互三大范式的全面升级&#xff0c;技术开发或将迎来一次全新的科技变革周期&#xff0c;因此 VDI 云桌面随之…

20分钟迁移完阿里云ECS跨区域迁移,用老操作系统作为新服务操作系统

由于特殊原因或者数据备份需要迁移ecs服务器 跨区域复制 镜像复制 由于特殊原因或者数据备份需要迁移ecs服务器 1.老服务快照 选择ecs实例&#xff0c;点开实例 进入云盘 https://ecs.console.aliyun.com/disk 在云盘上点击建立快照 https://oss.console.aliyun.com/bu…

C# 位移运算符 <<、>>, 以及 operator 关键字 重载运算符

关键字 operator operator关键字用于在类或结构声明中声明运算符。运算符声明可以采用下列四种形式之一&#xff1a; public static result-type operator unary-operator ( op-type operand ) public static result-type operator binary-operator ( op-type operand, op-ty…

IO、进程、线程03

第一题&#xff1a;预习 opendir 和 readdir函数 opendir 和 readdir 是两个在C语言&#xff08;特别是使用POSIX标准的系统&#xff0c;如Linux和UNIX&#xff09;中用于目录遍历的函数。这两个函数属于标准的C库中的目录操作部分&#xff0c;通常与<dirent.h>头文件一…

国内新能源汽车芯片自给,承认差距,任重道远

【科技明说 &#xff5c; 科技热点关注】 据近日工信部电子五所元器件与材料研究院高级副院长罗道军表示&#xff0c;中国拥有最大的新能源车产能&#xff0c;芯片用量也是越来越多。但是芯片的自给率目前不到10%&#xff0c;是结构性的短缺。 中国拥有最大新能源车产能&#…

万界星空科技MES系统车间设备管理模块的功能

MES系统&#xff08;制造执行系统&#xff09;中的车间设备管理模块是生产环境中不可或缺的一部分&#xff0c;它负责监控、管理和优化车间内所有设备的性能、利用率和维护活动。以下是该模块详细的功能描述&#xff1a; 1. 设备状态监控与实时数据采集 实时监控&#xff1a;通…

【Node.js】会话控制

express 中操作 cookie cookie 是保存在浏览器端的一小块数据。 cookie 是按照域名划分保存的。 浏览器向服务器发送请求时&#xff0c;会自动将 当前域名下可用的 cookie 设置在请求头中&#xff0c;然后传递给服务器。 这个请求头的名字也叫 cookie &#xff0c;所以将 c…