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

news2024/11/27 15:50:44

七,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. 最后:

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

在这里插入图片描述

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

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

相关文章

产业园区智慧招商解决方案

1. 项目背景与挑战 2023年&#xff0c;产业园区在智慧招商领域面临诸多挑战&#xff0c;包括传统推广方式、信息分散、跨部门协作障碍、缺乏主动服务、服务流程改进困难以及数据档案管理不善。 2. 方案思路 解决方案围绕“一套秘籍”和“一套流程”&#xff0c;服务三方角色…

OpenAI即将推出自然语音功能

&#x1f989; AI新闻 &#x1f680; OpenAI即将推出自然语音功能 摘要&#xff1a;测试博客testingcatalog揭示OpenAI正在通过逆向工程ChatGPT应用&#xff0c;计划增加更自然的语音朗读功能。未来可能推出8种新语音&#xff0c;具有独特代号&#xff0c;能表达动物叫声等非…

(苍穹外卖)day05 店铺营业状态设置 功能测试

目录 一.Redis入门 Redis简介 二.Redis数据类型 三.Redis常用命令 字符串操作命令 哈希操作命令 列表操作命令 集合操作命令 有序集合操作命令 通用命令 四.在java中操作Redis Redis的java客户端 ​编辑 五.店铺营业状态设置 代码开发 Redis---是一个数据库&…

浅谈信创浪潮下,职业院校人才培养有哪些新思路

一、信创产业发展背景 1.1 国家战略意义 信创产业&#xff0c;即信息技术应用创新产业&#xff0c;是国家战略发展的关键方向。近年来&#xff0c;在全球化的竞争和合作背景下&#xff0c;中国高度重视信息技术的自主创新能力&#xff0c;通过政策扶持、资金投入和市场引导等…

【数据结构】—— 栈与队列

目录 前言一、栈1.1 堆栈原理1.2 栈的实现 二、队列2.1 队列的概念2.2 队列结构2.2.1 顺序队列2.2.2 链队 2.3 队列的实现 三、堆与栈的区别3.1 内存中的堆与栈3.2 数据结构中的堆与栈 结语 前言 在单片机数据处理的时候&#xff0c;如果在中断里添加太多函数&#xff0c;可能会…

使用mobaxterm连接linux出现连接中断问题

1.问题描述 使用mobaxterm在连接到远程服务器时&#xff0c;如果隔一段时间不进行操作的话&#xff0c;会出现中断连接的现象。 2.解决 为了增强Linux系统的安全性&#xff0c;我们需要在用户输入空闲一段时间后自动断开&#xff0c;这个操作可以由设置TMOUT值来实现。将以下…

netty编程之基于websocket实现聊天功能

写在前面 源码 。 本文看下netty如何通过websocket实现聊天功能。 类似于实现http server,netty实现websocket也很简单&#xff0c;同样使用对应的编码器和解码器就行了&#xff0c;相关的有HttpServerCodec,HttpObjectAggregator,ChunkedWriteHandler。 1&#xff1a;编码 …

已解决:VS2022启动闪退,错误模块名称: clr.dll,版本: 4.8.9261.0,时间戳: 0x667a1925的问题

本问题已得到解决&#xff0c;请看以下小结&#xff1a; 关于《VS2022启动闪退》的解决方案 记录备注报错时间2024年报错版本VS2022报错复现下载某款VPN软件后&#xff0c;打开VS2022闪退&#xff0c;事件查看器输出如下报错描述错误应用程序名称: devenv.exe&#xff0c;版本:…

DAY 2 - 3 : 线性表—顺序存储

线性表—顺序表 问题引入&#xff1a; 线性表 定义 若干数据元素的一个线性序列。 表示 L (D,R) (即线性表L包含数据元素集合D和关系集合R&#xff09; D{ ai | ai∈datatype ,i0,1,2...n-1 ,n≥0} R{ <ai,ai1> | ai,ai1∈D, 0 ≤ i ≤ n - 2} < ai,ai1 >在这里称…

数据结构代码集训day14(适合考研、自学、期末和专升本)

题目均来自b站up&#xff1a;白话拆解数据结构&#xff01; 今日题目如下&#xff1a;&#xff08;1&#xff09;试写一个算法判断给定字符序列是否是回文。 &#xff08;2&#xff09;给定一个算法判断输入的表达式中括号是否匹配。假设只有花、中、尖三种括号。 题1 回文序列…

学习笔记 | 一文搞懂MySQL体系架构!!!(day22)

本文章的内容会在后面文章中慢慢讲解&#xff0c;该文章主要给各位博友zaipin提供学习思路&#xff0c;也希望大家在评论区发言表述&#xff0c;觉得文章有不足指出也可点评&#xff0c;希望大家多多支持&#xff01;&#xff01;&#xff01; 目录 一、MySQL 1.1 数据库概述 …

【项目日记】高并发内存池---实现页缓存

放纵自己的欲望是最大的祸害&#xff1b; 谈论别人的隐私是最大的罪恶&#xff1b; 不知自己过失是最大的病痛。 --- 亚里士多德 --- 高并发内存池---实现页缓存 1 页缓存整体设计思路2 框架搭建3 NewSpan函数4 请求Span联动 1 页缓存整体设计思路 首先我们来看页缓存的设…

windows手工杀毒-寻找可疑进程之进程名称

上篇回顾&#xff1a;windows手工杀毒-寻找可疑进程之进程图标-CSDN博客 上篇中我们简单介绍了什么是电脑病毒&#xff0c;也介绍了一种发现可疑进程的方法即根据进程图标确认是否是病毒&#xff0c;这种方法存在的理论基础是&#xff0c;通过图标可以很容易在电脑上找…

遥控器新手操作指南!!!

一、准备工作 检查电量&#xff1a;确保无人机和遥控器的电池电量充足&#xff0c;以避免在飞行过程中因电量不足而导致意外。 安装与连接&#xff1a;确保无人机的螺旋桨安装正确且牢固&#xff0c;同时检查无人机存储卡是否插入&#xff0c;以及遥控器与无人机之间的连接是…

论文笔记:2023顶会SIGIR - Strategy-aware Bundle Recommender System

论文笔记&#xff1a;2023顶会SIGIR - Strategy-aware Bundle Recommender System

【位运算】--- 初阶题目赏析

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey 根据上一篇位运算的总结&#xff0c;我们来体会几道初阶题目。 &#x1f3e0; 判定字符是否唯一 &#x1f4cc; 题目解析 判定字符是否唯一…

通义千问AI PPT初体验:一句话、万字文档、长文本一键生成PPT!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

leecode刷题经典算法套路模版笔记【递归回溯篇】--根本逻辑,快速掌控

刷题套路总结&#xff1a; 双指针&#xff1a; 单调性&#xff1b;对两端按照规律进行操作移动&#xff1b; 常见移法&#xff0c;右指针右移扩大范围&#xff0c;左指针左移缩小范围&#xff1b; 先举例模拟&#xff0c;然后推导公式&#xff1b; 递归&#xff0c;回溯 &am…

线程间同步的方式有哪些?

Linux 系统提供了五种用于线程间同步的方式&#xff1a;互斥锁、读写锁、自旋锁、信号量、条件变量 互斥锁 主要用于保护共享数据&#xff0c;确保同一时间内只有一个线程访问数据。 互斥量本质上来说就是一把锁&#xff0c;在访问共享资源前对互斥量进行加锁&#xff0c;访…

【go-zero】win启动rpc服务报错 panic: context deadline exceeded

win启动rpc服务报错 panic: context deadline exceeded 问题来源 在使用go-zero生成的rpc项目后 启动不起来 原因 这个问题原因是wndows没有启动etcd 官方文档是删除了etcd配置 而我自己的测试yaml配置有etcd&#xff0c;所以需要启动etcd 下载安装好etcd后&#xff0…