七,Spring Boot 当中的 yaml 语法使用

七,Spring Boot 当中的 yaml 语法使用

文章目录

  • 七,Spring Boot 当中的 yaml 语法使用
  • 1. yaml 的介绍
  • 2. yaml 基本语法
  • 3. yaml 数据类型
  • 4. 学习测试的准备工作
    • 4.1 yaml 字面量
    • 4.2 yaml 数组
    • 4.3 yaml 对象
  • 5. yaml 使用细节和注意事项
  • 6. 总结:
  • 7. 最后:


1. yaml 的介绍

yaml 的基本说明

  1. YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。[百度百科]
  2. YAML 是以数据作为中心,而不是以标记语言为重点
  3. YAML 仍然是一种标记语言,但是和传统的标记语言不一样,是以数据为中心的标记语言
  4. YAML 非常适合用来做以数据为中心 的配置文件【springboot:application.yml/ application.yaml】

yaml 的官方文档:https://yaml.org/

中文:这是一个博主自己写的:这里推荐一下给大家:https://ww.cnblogs.com/strongmore/p/14219180.html

2. yaml 基本语法

  1. yaml 语法的形式为:key: value 注意: key双引号的后面有空格。不可以漏了

  2. yaml语法是区分大小写的 ,id 和 ID 不是同一个东东

  3. yaml 语法是:使用缩进表示层级关系

  4. yaml 语法上的缩进不允许使用 tab 键,只允许使用空格 ,因为不同的编译器,对 Tab 键的格式不同。所以,推荐使用空格

  5. 缩进的空格数不重要,只要相同层级的元素左对齐即可,也就是相同层级的元素的空格数保持一致即可。

  6. yaml 对于字符串,可以不用加引号,当然,你加了引号也不会报错,也可以被识别为字符串。

  7. yaml 语法中,注解使用 #

  8. 注意:yaml中,要编写中文的话,要将项目的编码设置为 utf-8 ,不然,在 yaml 中无法识别到中文,会报错。

  9. yaml 文件的后缀,可以是 yaml 或者是 yml ,两者都是可以的。

3. yaml 数据类型

对于 yaml 来说,数据类型分为三种:

  • 字面量
  • 对象
  • 数组

4. 学习测试的准备工作

首先我们这里准备好需要使用的 两个Bean对象,用于使用 yaml 语法进行属性上的赋值。

这里我使用了 Lombok 插件,简化单例 bean 对象的编写,关于 Lombok 的使用,大家可以移步至:✏️✏️✏️ 六,Spring Boot 容器中 Lombok 插件的详细使用,简化配置,提高开发效率-CSDN博客

在这里插入图片描述

package com.rainbowsea.springbootyaml.bean;


import lombok.Data;




@Data
public class Car {
    private String name;
    private Double price;

}

在这里插入图片描述

package com.rainbowsea.springbootyaml.bean;


import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;


@ConfigurationProperties(prefix = "monster")
@Component
@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Monster {
    private Integer id;
    private String name;
    private Boolean isMarried;
    private Integer age;
    private Date birth;
    private Car car;
    private String[] skill;
    private List<String> hobby;
    private Map<String,Object> wife;
    private Set<Double> salaries;
    private Map<String,List<Car>> cars;

}

还有一个 controller 请求处理的控制器

在这里插入图片描述

package com.rainbowsea.springbootyaml.controller;


import com.rainbowsea.springbootyaml.bean.Monster;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;



@RestController  // @Controller + @ResponseBody
public class HiController {


    //@Resource  // 通过 yaml 注入赋值 @Resource 和 Autowired 都可以,因为该bean对象已经被注入到ioc容器当中了
    @Autowired
    private Monster monster;


    @RequestMapping("/monster")  // 设置请求的映射路径
    public Monster monster(){
        return monster;
    }
}

最后就是一个应用程序的启动场景了

在这里插入图片描述

package com.rainbowsea.springbootyaml;


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);
    }
}

4.1 yaml 字面量

字面量:单个的,不可再分的值,比如:date,boolean,string,number,null

保存形式:key: value 注意空格。

monster:
  age: 5000
  is-married: true
  birth: 2000/10/10
  name: 牛魔王
  id: 100
car: # 换行格式
  name: 宝马~
  price: 30000

在spring boot 当中,一般将 yaml 的配置文件,放到 类路径下 resources 下。名为application.yaml / application.yml。这里我们以 yml 后缀进行测试。

在这里插入图片描述

在这里插入图片描述

monster:
  age: 5000
  is-married: true
  birth: 2000/10/10
  name: 牛魔王
  id: 100
  # 对象
  #  car: {name: 宝马,price: 10000} # 行内格式,不用忽略了空格,里面,和外面的空格
  car: # 换行格式
    name: 宝马~
    price: 30000

运行测试:

在这里插入图片描述

特别说明:

想要使用 yaml 的配置文件,赋值到对应的bean对象上的属性值上,需要使用@ConfigurationProperties(prefix = "monster") 注解。@ConfigurationProperties(prefix = “前缀”)

在这里插入图片描述

4.2 yaml 数组

数组:一组次序排列的值,比如 array,list,queue

行内写法: K: [v1,v2,v3] # 注意:K引号后要有空格
# 或者是
K:
- v1
- v2
- v3
# 减号,后面要有空格

举例:

在这里插入图片描述

monster:
  age: 5000
  is-married: true
  birth: 2000/10/10
  name: 牛魔王
  id: 100
  # 对象
  #  car: {name: 宝马,price: 10000} # 行内格式,不用忽略了空格,里面,和外面的空格
  car: # 换行格式
    name: 宝马~
    price: 30000

    # 数组
  skill:  [芭蕉扇,牛魔拳]  # 行内格式
  #  skill:
  #    - 芭蕉扇~
  #    - 牛魔拳~

  #  hobby: [喝酒,吃肉] # 行内格式
  hobby:
    - 喝酒~
    - 吃肉~

运行测试:

在这里插入图片描述

4.3 yaml 对象

对象:键值对的集合:比如:map,hash,set,object

行内写法: K: {k1: v1,k2: v2,k3: v3} # 注意:行内的key引号后也要空格一下
或者是:
K:
 k1: v1
 k2: v2
 k3: v3 
 # 注意空格.

举例
在这里插入图片描述

monster:
  age: 5000
  is-married: true
  birth: 2000/10/10
  name: 牛魔王
  id: 100
  # 对象
  #  car: {name: 宝马,price: 10000} # 行内格式,不用忽略了空格,里面,和外面的空格
  car: # 换行格式
    name: 宝马~
    price: 30000

    # 数组
  skill:  [芭蕉扇,牛魔拳]  # 行内格式
  #  skill:
  #    - 芭蕉扇~
  #    - 牛魔拳~

  #  hobby: [喝酒,吃肉] # 行内格式
  hobby:
    - 喝酒~
    - 吃肉~


  #map 属性对象
  #  wife: {no1: 玉面狐狸,no2: 铁扇公主} # 行内风格,不用忽略了空格,里面,和外面的空格
  wife:
    no1: 玉面狐狸
    no2: 铁扇公主
  salaries: [10000,20000]
  cars: # 因为   private Map<String,List<Car>> cars;
    group1:
      - {name: 奔驰,price: 3000}
      - name: 保时捷
        price: 6000
    group2:
      - {name: 保时捷,price: 8000}
      - name: 宝马
        price: 5000

运行测试:

在这里插入图片描述

5. yaml 使用细节和注意事项

  1. 如果 application.propertiesapplication.yaml 有相同的前缀数值上的绑定的话,则application.properties 优先级高,开发时,应当避免。

在这里插入图片描述

  1. 在 yaml 当中,字符串无需加引号,但如果你用 "" 或者是 '' 包起来,也可以。都不会报错。
  2. 大家知道,我们在编写 application.yaml 文件时候,没有提示Bean对象的属性字段的信息表,非常不方便。解决这个问题,同时,你已经配置好了的 属性,它是不会提示的,非常的方便。我们只需要添加上如下依赖即可。同时也能解决(),使用 @ConfigurationProperties(prefix = “furn01”) 会提示如下信息 但是不会影响使用

在这里插入图片描述

解决方法: 在 pom.xml 增加依赖, 即可

在这里插入图片描述

        <!--        解决  @ConfigurationProperties(prefix = "furn01") 提示信息,  在 pom.xml  增加依赖,  即可
Spring Boot Configuration Annotation Processor not configured 提示信息
这里配置 optional 为 ture
    说明: 表示防止将此依赖传递到其它模块上,
-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
  1. 如果上述方式没有提示的话,可以安装一个名为 yaml的插件来搞定。

在这里插入图片描述

6. 总结:

  1. 熟悉 yaml 的基本语法。
  2. yaml 的数据类型有三种:字面量,数组,对象。
  3. 有时候,赋值失败了,看看是不是,对应空格层级的控制不对。没有对上。对正确。
  4. yaml 语法当中,: 号后面都用空格,不用漏了。
  5. 注意:yaml中,要编写中文的话,要将项目的编码设置为 utf-8 ,不然,在 yaml 中无法识别到中文,会报错。
  6. yaml 文件的后缀,可以是 yaml 或者是 yml ,两者都是可以的。
  7. yaml 语法上的缩进不允许使用 tab 键,只允许使用空格 ,因为不同的编译器,对 Tab 键的格式不同。所以,推荐使用空格。
  8. 缩进的空格数不重要,只要相同层级的元素左对齐即可,也就是相同层级的元素的空格数保持一致即可。

7. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024高教社杯数学建模竞赛解题思路

高教社杯数学建模竞赛解题思路&#xff1a;独家出版&#xff0c;思路解析模型代码结果可视化。 A题思路及程序链接&#xff1a;https://mbd.pub/o/bread/ZpqblJZs B题思路及程序链接&#xff1a;https://mbd.pub/o/bread/ZpqblJZx D题思路及程序链接&#xff1a;https://mbd.pu…

常用排序算法(上)

目录 前言&#xff1a; 1.排序的概念及其运用 1.1排序的概念 1.2排序运用 1.3 常见的排序算法 2.常见排序算法的实现 2.1 堆排序 2.1 1 向下调整算法 2.1 2 建堆 2.1 3 排序 2.2 插入排序 2.1.1基本思想&#xff1a; 2.1.2直接插入排序&#xff1a; 2.1.3 插…

elementUI——checkbox复选框监听不到change事件,通过watch监听来解决——基础积累

今天在写后台管理系统的时候&#xff0c;遇到一个需求&#xff0c;就是要求监听复选框的change事件&#xff0c;场景就是&#xff1a;两个复选框互斥&#xff0c;且可以取消勾选。 就是这两个复选框可以同时都不勾选&#xff0c;如果勾选的话&#xff0c;另一个一定要取消勾选。…

具身智能猜想 ——机器人进化

设想一个机器人进化的仿真模拟环境&#xff0c;可以通过 “基因突变” 产生新功能&#xff0c;让机器人逐步进化。以下是这个进化系统的关键要素和可能的实现步骤&#xff1a; 1. 仿真环境 虚拟世界&#xff1a;创建一个包含多样化任务和挑战的虚拟环境&#xff0c;如探索、抓…

多智能体强化学习:citylearn城市建筑能量优化和需求响应

今天分享一个用于能量优化的强化学习框架&#xff0c;citylearn 代码量非常庞大&#xff0c;我都不敢看&#xff0c;看也看不完&#xff0c;不花一定的时间难以搞懂它的原理。 CityLearn&#xff08;CL&#xff09;环境是一个类似 OpenAI Gym 的环境&#xff0c;它通过控制不…

UE5 C++ 读取图片插件(一)

原来UE可以使用 static,之前不知道&#xff0c;一用就报错。 static TSharedPtr<IImageWrapper> GetImageWrapperByExtention(const FString InImagePath); //智能指针&#xff0c;方便追寻引用C,加载ImageWrapperstatic UTexture2D* LoadTexture2D(const FString& …

代码随想录 刷题记录-28 图论 (5)最短路径

一、dijkstra&#xff08;朴素版&#xff09;精讲 47. 参加科学大会 思路 本题就是求最短路&#xff0c;最短路是图论中的经典问题即&#xff1a;给出一个有向图&#xff0c;一个起点&#xff0c;一个终点&#xff0c;问起点到终点的最短路径。 接下来讲解最短路算法中的 d…

matter的Commissioning(入网过程)整体流程、加密方式、通信信息结构

在Matter协议中&#xff0c;**控制器负责将新设备加入网络&#xff08;commissioning&#xff09;**的整个流程&#xff0c;这一过程包括设备的发现、验证、授权、加入Fabric&#xff0c;以及最终建立数据通信的步骤。配网完成后的数据通信过程同样遵循严格的加密方式&#xff…

C语言 | Leetcode C语言题解之第385题迷你语法分析器

题目&#xff1a; 题解&#xff1a; struct NestedInteger* helper(const char * s, int * index){if (s[*index] [) {(*index);struct NestedInteger * ni NestedIntegerInit();while (s[*index] ! ]) {NestedIntegerAdd(ni, helper(s, index));if (s[*index] ,) {(*index…

TCP的流量控制深入理解

在理解流量控制之前我们先需要理解TCP的发送缓冲区和接收缓冲区&#xff0c;也称为套接字缓冲区。首先我们先知道缓冲区存在于哪个位置&#xff1f; 其中缓冲区存在于Socket Library层。 而我们的发送窗口和接收窗口就存在于缓冲区当中。在实现滑动窗口时则将两个指针指向缓冲区…

社交媒体的智能变革:Facebook AI优化用户体验

Facebook作为全球领先的社交平台&#xff0c;一直致力于通过人工智能&#xff08;AI&#xff09;技术提升用户体验。AI技术在Facebook的应用涵盖了推荐系统、自然语言处理、广告投放和用户反馈等多个方面&#xff0c;使平台的互动和内容体验更加智能和个性化。 推荐系统的智能化…

火焰传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 三、程序设计 main.c文件 IR.h文件 IR.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 火焰传感器是一种常用于检测火焰或特定波长&#xff08;760nm-1100nm&#xff09;红外光的传感器。探测角度60左右&am…

高压喷雾车的功能与应用_鼎跃安全

在一次森林火灾中&#xff0c;位于山区的一个小型度假村附近突然起火&#xff0c;由于山风强劲&#xff0c;火势迅速蔓延&#xff0c;消防部门立即调派多辆高压喷雾车赶往现场。在扑救过程中&#xff0c;传统消防车难以进入崎岖的山路&#xff0c;但高压喷雾车凭借其高机动性顺…

大模型笔记01--基于ollama和open-webui快速部署chatgpt

大模型笔记01--基于ollama和open-webui快速部署chatgpt 介绍部署&测试安装ollama运行open-webui测试 注意事项说明 介绍 近年来AI大模型得到快速发展&#xff0c;各种大模型如雨后春笋一样涌出&#xff0c;逐步融入各行各业。与之相关的各类开源大模型系统工具也得到了快速…

【神经网络系列(高级)】神经网络Grokking现象的电路效率公式——揭秘学习飞跃的秘密【通俗理解】

【通俗理解】神经网络Grokking现象的电路效率公式 论文地址&#xff1a; https://arxiv.org/abs/2309.02390 参考链接&#xff1a; [1]https://x.com/VikrantVarma_/status/1699823229307699305 [2]https://pair.withgoogle.com/explorables/grokking/ 关键词提炼 #Grokkin…

【办公效率】Axure会议室预订小程序原型图,含PRD需求文档和竞品分析

作品说明 作品页数&#xff1a;共50页 兼容版本&#xff1a;Axure RP 8/9/10 应用领域&#xff1a;中小型企业的会议室在线预订 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 本作品为会议室预订小程序原型图&#xff0c;定位于拥有中大型…

Python 人脸识别实战教程

引言 在本教程中&#xff0c;我们将深入探讨如何使用Python和OpenCV库来实现人脸检测与识别。本文从基础知识入手&#xff0c;逐步构建一个简单的人脸识别系统。本教程假设读者已经熟悉Python编程&#xff0c;并具备一定的OpenCV使用经验。 环境配置 安装必要的库 确保您的…

GitLab 是什么?GitLab使用常见问题解答

GitLab 是什么 GitLab是由GitLab Inc.开发&#xff0c;使用MIT许可证的基于网络的Git仓库管理工具开源项目&#xff0c;且具有wiki和issue跟踪功能&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的web服务。 ​GitLab 是由 GitLab Inc.开发&#xff0c…

COD论文笔记 ECCV2024 Just a Hint: Point-Supervised Camouflaged Object Detection

这篇论文的主要动机、现有方法的不足、拟解决的问题、主要贡献和创新点&#xff1a; 1. 动机 伪装物体检测&#xff08;Camouflaged Object Detection, COD&#xff09;旨在检测隐藏在环境中的伪装物体&#xff0c;这是一个具有挑战性的任务。由于伪装物体与背景的细微差别和…

怎么才能快速提升网站在谷歌的收录?

​想让你的网站在谷歌快速收录&#xff0c;其实正常的方法都需要时间&#xff0c;无论是定期更新&#xff0c;提交网站地图&#xff0c;搞外链建设啥的&#xff0c;这些方法虽然有效&#xff0c;但见效慢。而且谷歌爬虫不会一下子抓取你所有页面&#xff0c;需要时间。如果真想…