[SpringBoot] YAML基础语法

news2024/11/18 19:32:46

 ✨✨个人主页:沫洺的主页

 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 

                           📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专栏

💖💖如果文章对你有所帮助请留下三连✨✨

🥨YAML

Spring Boot 提供了大量的自动配置,极大地简化了spring 应用的开发过程,当用户创建了一个 Spring Boot 项目后,即使不进行任何配置,该项目也能顺利的运行起来。当然,用户也可以根据自身的需要使用配置文件修改 Spring Boot 的默认设置。

SpringBoot 默认使用以下 2 种全局的配置文件,其文件名是固定的。

  • application.properties

  • application.yml/yaml

其中,application.yml 是一种使用 YAML 语言编写的文件,它与 application.properties一样,可以在 Spring Boot 启动时被自动读取,修改 Spring Boot 自动配置的默认值。

🥟YAML 简介 

YAML 全称 YAML Ain't Markup Language,它是一种以数据为中心的标记语言,比 XML 和 JSON 更适合作为配置文件。

想要使用 YAML 作为属性配置文件(以 .yml 或 .yaml 结尾),需要将 SnakeYAML 库添加到 classpath 下,Spring Boot 中的 spring-boot-starter-web 或 spring-boot-starter 都对 SnakeYAML 库做了集成, 只要项目中引用了这两个 Starter 中的任何一个,Spring Boot 会自动添加 SnakeYAML 库到 classpath 下。

🍠YAML 语法

YAML 的语法如下:

  • 使用缩进表示层级关系。

  • 缩进时不允许使用 Tab 键,只允许使用空格。(可设置Tab替换四个空格)

  • 缩进的空格数不重要,但同级元素必须左侧对齐。

  • 大小写敏感。

  • #表示注释。

🥞YAML 常用写法

YAML 支持以下几种数据结构:

  • 普通的值(数字、字符串、布尔、日期)

  • 对象 属性值的集合

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

  • 集合 List、Set 与数组一样,Map与对象一样键值对的集合

普通值(字面量)

  • 字面量是指单个的,不可拆分的值,例如:数字、字符串、布尔值、以及日期等。
  • 在 YAML 中,使用“key:[空格]value的形式表示一对键值对(空格不能省略)
  • 字面量直接写在键值对的“value中即可,且默认情况下字符串是不需要使用单引号或双引号的
username: root
password: 123456
  • 若字符串使用单引号,则不会转义特殊字符,特殊字符会输出为其本身想表达的含义
username1: 'zhangsan \n lisi'
  • 输出:zhangsan \n lisi
  • 若字符串使用双引号,则会转义特殊字符,\n代表换行
username2: "zhangsan \n lisi"
  • 输出:'zhangsan
    •     lisi'

对象(属性和值)、Map(键值对)

它们都是一对键值对,YAML 为对象提供了 2 种写法

  • 普通写法 ,使用缩进表示对象与属性的层级关系。
map1:
    name: 张三
    age: 23
  • 行内写法

map2: {name: 李四,age: 24}

@ConfigurationProperties获取键值对数据

 @Value获取键值对数据

 @Value获取map数据

map解析中,字符串一定要用"“把map所对应的value包起来,要不然解析会失败,导致不能转成 Map<StrObject>

test:
  map: "{name: '李四',age: 24}"
@Component
@Data
public class Test {
    @Value("#{${test.map}}")
    private Map<String,Object> map;

}

这里说明一下,获取的map值是Test(map={name=李四, age=24})这样的,数据是在{}里的

YAML语法中如果一个值以 “{” 开头, YAML 将认为它是一个字典, 所以我们必须如下方式引用它

map: "{name: '李四',age: 24}"

数组、list、set

YAML 使用“-”表示数组、list、set 中的元素

  • 普通写法
  array1:
    - 张三
    - 李四
  list1:
    - 23
    - 24
  • 行内写法
array2: [王五,毛六]
list2: [25,26]

@ConfigurationProperties获取数组与集合数据

  @Value根据索引获取数组与集合单个元素数据

想从yml配置文件中读取数组,但是按照yml配置数组的形式有点麻烦,可以使用字符串去模拟数组

test:
  list: 张三,李四,王五

spring默认时按照逗号进行分割的,所以代码中可以写成

@Component
@Data
public class Test {
    @Value("${test.list}")
    private List<String> list;
}

另外,@Value注解是支持SpEL表达式的,所以还可以写成

@Component
@Data
public class Test {
    @Value("#{'${test.list}'.split(',')}")
    private List<String> list;
}

 复合结构

以上几种数据结构可以任意组合使用,以实现不同的用户需求

比如List中放Map

test:
  listInMap:
    - name: 张三
      age: 23
    - name: 李四
      age: 24
    - {name: 王五,age: 25}

YAML 组织结构

一个 YAML 文件可以由一个或多个文档组成,文档之间使用“---作为分隔符,且个文档相互独立,互不干扰。如果 YAML 文件只包含一个文档,则“---分隔符可以省略。

#默认配置
server:
  port: 8080
#切换配置
spring:
  profiles:
    active: test
---
#开发环境
server:
  port: 8081
spring:
  config:
    activate:
      on-profile: dev
---
#测试环境
server:
  port: 8082
spring:
  config:
    activate:
      on-profile: test
---
#生产环境
server:
  port: 8083
spring:
  config:
    activate:
      on-profile: prod

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

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

相关文章

四线法与电桥

目录&#xff1a; 一、基本电桥电路 二、开尔文四线检测 三、惠斯通与开尔文电桥 1、电阻桥定义解释 2、电阻桥相关计算 3、开尔文双电桥 4、电阻桥的应用 --------------------------------------------------------------------------------------------------------…

java中的垃圾回收算法与垃圾回收器

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Swift学习笔记笔记(五) Swift扩展协议类

一、 实验目的&#xff1a; 1.掌握Swift扩展型 2.掌握Swift协议 3.掌握Swift类 二、实验原理&#xff1a; 1.Swift扩展的定义 2.Swift协议的定义 3.Swift类的定义 三、实验步骤及内容&#xff1a; 1.方法 //实例方法 class Website { var visitCount 0 func visiting(){…

【LC】二叉树应用强化OJ

✨博客主页: 心荣~ ✨系列专栏:【LeetCode/牛客刷题】 ✨一句短话: 难在坚持,贵在坚持,成在坚持! 文章目录1. 检查两颗树是否相同2. 另一颗树的子树3. 二叉树最大深度4. 判断—颗二叉树是否是平衡二叉树5. 对称二叉树6. 二叉树的构建及遍历7. 二叉树的分层遍历8. 给定一个二叉树…

JAVAweb第一次总结作业

1.什么是html HTML的全称为超文本标记语言(Hyper Text Markup Language)&#xff0c;是一种标记语言。它包括一系列标签&#xff0c;通过这些标签可以将网络上的文档格式统一&#xff0c;使分散的Internet资源连接为一个逻辑整体。 HTML文本是由HTML命令组成的描述性文本&…

【Python】import模块的多种操作

前言 记录一下关于Python在导入模块时候一些操作~ 知识点&#x1f4d6;&#x1f4d6; Python魔法方法&#xff1a;__all__ Python内置模块&#xff1a;importlib 实现 指定导出的变量 当你在使用 from xxx import * 时候&#xff0c;可以通过 __all__ 来指定可被导出的变…

每天五分钟机器学习:通过学习曲线判断模型是过拟合还是欠拟合

本文重点 本节课程我们学习使用学习曲线来判断某一个学习算法是否处于偏差、方差问题。学习曲线其实就是训练误差和验证误差关于样本m的曲线,我们将通过学习曲线来判断该算法是处于高偏差问题,还是处于高方差问题。 高偏差问题(欠拟合) 注意:这个m表示训练集数据样本…

王二涛研究组揭示丛枝菌根共生与根瘤共生的协同进化机制

2021年&#xff0c;中国科学院分子植物科学卓越创新中心王二涛团队在《Molecular Plant》发表了“Mycorrhizal Symbiosis Modulates the Rhizosphere Microbiota to Promote Rhizobia Legume Symbiosis”研究论文&#xff0c;该研究通过定量微生物组、微生物共发生网络及微生物…

mac for m1(arm):安装redis的四种方式(本机安装、homebrew安装、虚拟机安装、docker安装)

0. 引言 redis作为当今最常用的非关系型数据库&#xff0c;被广泛应用于数据缓存场景。而mac m1采用arm芯片&#xff0c;使得众多软件安装成为问题&#xff0c;今天我们来看mac m1如何安装redis 1.本机安装redis 1、下载redis安装包&#xff1a;https://redis.io/download/ …

subplots()--matplotlib

1. 函数功能 成一个画布和若干子区。2. 函数语法 matplotlib.pyplot.subplots(nrows1, ncols1, *, sharexFalse, shareyFalse, squeezeTrue, subplot_kwNone, gridspec_kwNone, **fig_kw)3. 函数参数与示例 参数含义nrows, ncols画布被分成的行、列数squeeze布尔值&#xf…

【畅购商城】用户登录

用户登录 构建页面&#xff1a;Login.vue步骤一&#xff1a;创建Login.vue步骤二&#xff1a;绘制通用模块<template> <div> <TopNav></TopNav> <div style"clear:both;"></div> <HeaderLogo></HeaderLogo> <div…

嵌入式开发--CubeMX使用入门教程

嵌入式开发–CubeMX使用入门教程 CubeMX简介 传统的单片机开发时&#xff0c;需要针对片上外设做各种初始化的工作&#xff0c;相当麻烦。 CubeMX是ST公司出品的一款图形化代码生成工具&#xff0c;通过图形化界面&#xff0c;可以非常直观的配置好各种片上外设&#xff0c;时…

一个方便IO单元测试的C#扩展库

对于我们.Net程序员&#xff0c;System.Web.Abstractions我们都非常熟悉&#xff0c;主要作用于Web可以实现单元测试&#xff0c;他是在.Net framework 3.5 sp1开始引入的,很好的解决项目表示层不好做单元测试的问题&#xff0c;这个库所有类都是Wrapper/Decorator模式的。今天…

[SpringBoot] Spring Boot注册Web原生组件/拦截器HandlerInterceptor

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

风控建模坏样本太少,不要再用过采样和欠采样了,试下这种更有效的方法

样本数据不平衡是我们建模场景中经常遇到的问题&#xff0c;由于目标类别的分布占比差异较大&#xff0c;使得模型训练难以取得较好的拟合效果&#xff0c;甚至模型结果在实际应用中无效。举个最常见的例子&#xff0c;在信贷场景中构建反欺诈模型时&#xff0c;训练样本数据的…

(附源码)计算机毕业设计SSM垃圾分类综合服务系统

&#xff08;附源码&#xff09;计算机毕业设计SSM垃圾分类综合服务系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

(27)语义分割--cityscape数据集的读取和使用

1、主要参考 (1) 图像分割cityscape数据集使用介绍 - 知乎 (2)torchvision支持很多现成的数据集 Datasets — Torchvision 0.13 documentation 。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。。。。。 2、下载…

CTFHub | 整数型注入

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

【Vue 快速入门系列】列表的基本使用

文章目录前言列表的基本使用Key的原理列表过滤列表排序前言 本篇文章讲述Vue中最基本的列表使用&#xff0c;如何迭代列表取值&#xff0c;如何对列表进行过滤、排序等。 列表的基本使用 在Vue中使用列表的时候灰常简单&#xff0c;只需要将Vue属性内的列表数据与dom标签进行…

[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL

目录 前言&#xff1a; 第1章 驱动程序功能设计 1.1 关于用户空间驱动 1.2 硬件驱动程序的四大功能概述 1.3 OAM管理面功能&#xff1a;站在管理源的角度&#xff0c;看如何监控使能和监控硬件。 1.4 控制面功能&#xff1a;站在业务的角度看&#xff0c;如何使能和监控硬…