当前位置: 首页 > news >正文

重学SpringBoot3-yaml文件配置

重学SpringBoot3-yaml文件配置

  • 引言
  • YAML 基本语法
  • YAML 数据类型
    • YAML 对象
    • YAML 数组
    • 复合结构
    • 标量
    • 引用
  • YAML 文件结构
  • Spring Boot 中的 YAML 配置
  • 注意事项
  • 总结
  • 参考

引言

YAML(YAML Ain’t Markup Language)是一种常用于配置文件的数据序列化格式,因其易于阅读和书写而广受欢迎。在 Spring Boot 应用中,YAML 文件通常用于替代传统的 properties 文件,用于配置应用的各种参数。本教程将引导你了解 YAML 文件的基本写法和在 Spring Boot 中的应用。

YAML 的配置文件后缀为 .yml.yaml,如:app.yml

YAML 基本语法

YAML 的设计目标是易于阅读和书写,其主要元素包括:

  • 缩进:YAML 使用缩进表示层级关系,通常使用两个空格作为缩进级别,不推荐使用 Tab 键。
  • 键值对:使用冒号加空格分隔键和值。
  • 列表:使用短横线 - 表示列表项。
  • 注释:使用井号 # 开头标记注释。
  • 大小写敏感:建议使用串式命名法(短横线-)代替驼峰,即使用 device-type 代替 deviceType

YAML 数据类型

YAML 支持以下几种数据类型:

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary);
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list);
  • 标量(scalars):单个的、不可再分的值;

YAML 对象

  • 对象键值对使用冒号结构表示 key: value,(注意:冒号后面要加一个空格)。
  • 也可以使用 key:{key1: value1, key2: value2, …}。
  • 还可以使用缩进表示层级关系。

示例:

key: child-key: valuechild-key2: value2

示例

较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value:

? - k1- k2- k3
:- v1- v2- v3

示例

YAML 数组

以"-"开头的行表示构成一个数组(注意:-后面有一个空格):

- A
- B
- C

示例

YAML数组也可以使用行内表示:

key: [value1, value2, ...]

示例

数据子成员是一个数组(注意缩减一个空格):

-- A- B- C

示例

数据子成员是一个对象数组:

list:-id: 1name: n1-id: 2name: n2

示例

意思是 list 属性是一个对象数组,每一个数组元素又是由 id、name 两个属性构成。

数组也可以使用流式(flow )的方式表示:

示例

复合结构

数组和对象可以构成复合结构,例:

YAML Resources:YAML Specifications:- YAML 1.2:- Revision 1.2.2      # Oct 1, 2021 *New*- Revision 1.2.1      # Oct 1, 2009- Revision 1.2.0      # Jul 21, 2009- YAML 1.1- YAML 1.0YAML Matrix Chat:  '#chat:yaml.io'     # Our New Group Chat Room!YAML IRC Channel:  libera.chat#yaml    # The old chat

示例

标量

纯量是最基本的,不可再分的值,包括:

  • 字符串
  • 布尔值
  • 整数
  • 浮点数
  • Null
  • 时间
  • 日期

使用一个例子来快速了解标里可以使用哪些表示形式:

boolean: - TRUE  #true,True都可以- FALSE  #false,False都可以
float:- 3.14- 6.8523015e+5  #可以使用科学计数法
int:- 123- 0b1010_0111_0100_1010_1110    #二进制表示
null:nodeName: 'node'parent: ~  #使用~表示null
string:- 哈哈- 'Hello world'  #可以使用双引号或者单引号包裹特殊字符- newlinenewline2    #字符串可以拆成多行,每一行会被转化成一个空格
date:- 2018-02-17    #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime: -  2018-02-17T15:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

示例

引用

“&”锚点和“*****”别名,可以用来引用(相当于定义变量和使用变量):

- &V1 java
- C
- C++
- *V1

示例

再看一个复杂的例子:

defaults: &defaultsadapter:  postgreshost:     localhostdevelopment:database: myapp_development<<: *defaultstest:database: myapp_test<<: *defaults

示例

& 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点。

YAML 文件结构

以下是一个简单的 YAML 配置文件示例:

server:port: 8080context-path: /apispring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: userpassword: passjpa:hibernate:ddl-auto: updateshow-sql: truemyapp:feature:enabled: truesecurity:level: high

在这个例子中:

  • server, spring, myapp 是顶级配置项。

  • 使用缩进表示层级结构,例如 datasourcespring 下的子项。

  • 列表可以表示为:

    myapp:roles:- admin- user- guest
    

Spring Boot 中的 YAML 配置

在 Spring Boot 应用中,YAML 文件通常命名为 application.yml,放置在 src/main/resources 目录下。Spring Boot 会自动加载这个文件并将其属性绑定到 Spring 环境中。

示例:配置数据库连接

spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: dbuserpassword: dbpassdriver-class-name: com.mysql.cj.jdbc.Driver

示例:配置多环境

你可以为不同的环境定义不同的配置文件,如 application-dev.yml, application-test.yml, application-prod.yml,并在主配置文件中指定活跃的配置文件:

spring:profiles:active: dev

注意事项

  • 确保正确使用缩进,因为错误的缩进会导致配置无法正确解析。

  • 避免在 YAML 文件中使用 Tab 键,这可能导致解析错误。

  • 注意字符串中特殊字符的处理,必要时可以使用双引号或单引号。

    • 单引号不会转义【\n 则为普通字符串显示】
    • 双引号会转义【\n会显示为换行符
  • 大文本

    • |开头,大文本写在下层,保留文本格式换行符正确显示
    • >开头,大文本写在下层,折叠换行符
  • 多文档合并

    • 使用---可以把多个yaml文档合并在一个文档中,每个文档区依然认为内容独立

总结

YAML 提供了一种更为人性化的配置文件格式,它通过简洁的结构化格式,使得配置信息更加易于理解和维护。在 Spring Boot 中,通过使用 YAML,开发者可以轻松地管理和切换不同环境下的配置,优化开发流程。掌握 YAML 的基本写法和在 Spring Boot 中的应用,将有助于提高你的开发效率。

参考

YAML 入门教程 | 菜鸟教程

YAML 备忘清单

相关文章:

重学SpringBoot3-yaml文件配置

重学SpringBoot3-yaml文件配置 引言YAML 基本语法YAML 数据类型YAML 对象YAML 数组复合结构标量引用 YAML 文件结构Spring Boot 中的 YAML 配置注意事项总结参考 引言 YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种常用于配置文件的数据序列化格式&#xff…...

【管理咨询宝藏资料33】某头部咨询公司组织效能提升模型方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏资料33】某头部咨询公司组织效能提升模型方案 【关键词】战略规划、组织效能、管理咨询 【文件核心观点】 - 通过长期行业积累和市场洞察&#…...

特征值和特征向量及其在机器学习中的应用

特征值和特征向量是线性代数中的概念&#xff0c;用于分析和理解线性变换&#xff0c;特别是由方阵表示的线性变换。它们被用于许多不同的数学领域&#xff0c;包括机器学习和人工智能。 在机器学习中&#xff0c;特征值和特征向量用于表示数据、对数据执行操作以及训练机器学…...

【Vue3】Ref 和 ShallowRef 的区别

这里写自定义目录标题 什么是 Ref什么是 ShallowRef区别对比示例代码 什么是 Ref Ref 是 Vue 3 中的一个新的基本响应式数据类型&#xff0c;它允许我们包装任意的 JavaScript 值&#xff0c;并且在数据变化时发出通知。Ref 提供了一个 .value 属性来访问其内部的值&#xff0…...

Linux - 进程概念

1、冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系&#xff1b; 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是有一个个的硬件组件组成&#xff1a; 输入单元&#xff1a;…...

H5小游戏,象棋

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的,私信本人,发演示地址,可以后再订阅,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、开心消消乐、扑鱼达人、飞机大战等等 <!DOCTYPE html PUBLIC "-//W3C/…...

LLM春招准备(1)

llm排序 GPT4V GPT-4V可以很好地理解直接绘制在图像上的视觉指示。它可以直接识别叠加在图像上的不同类型的视觉标记作为指针&#xff0c;例如圆形、方框和手绘&#xff08;见下图&#xff09;。虽然GPT-4V能够直接理解坐标&#xff0c;但相比于仅文本坐标&#xff0c;GPT-4V在…...

网络安全知识点总结

1、常见的网络攻击有哪些&#xff1f; 答&#xff1a;&#xff08;1&#xff09;口令攻击&#xff1a;也就是窃取用户的账户和密码&#xff0c;普通用户习惯于设置简单的密码&#xff0c;且多个系统用同一套密码&#xff0c;黑客可以使用字典攻击&#xff08;常用密码库&#…...

服务完善的智能组网系统?

智能组网是现代信息技术的重要组成部分&#xff0c;它通过将各种设备和计算机连接起来&#xff0c;实现高效的数据传输和远程通信。在一个全球化、高度互联的时代背景下&#xff0c;智能组网已经成为了各行各业的必需品。传统的组网方案往往面临着许多问题和挑战。为了解决这些…...

VS2022如何添加行号?(VS2022不显示行号解决方法)

VS2022不显示行号解决方法 VS2022是非常好用的工具&#xff0c;很多同学在初学C/C的时候&#xff0c;都会安装&#xff0c;默认安装好VS2022后&#xff0c;写代码时&#xff0c;在编辑框的窗口左边就有显示行号&#xff0c;如下图所示&#xff1a; 但是有些同学安装好后&#…...

125.验证回文字符串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否则&#…...

Spring Boot的启动流程(个人总结,仅供参考)

SpringBoot应用程序的启动流程主要包括初始化SpringApplication和运行SpringApplication两个过程。 1.初始化SpringApplication包括配置基本的环境变量、资源、构造器和监听器&#xff0c;初始化阶段的主要作用是为运行SpringApplication实例对象启动环境变量准备以及进行必要的…...

用BIO实现tomcat

一、前言 本课程的难度较高&#xff0c;需要将Servlet原理和IO课程全部学完。 二、当前项目使用方式 (1).自定义servlet 自定义servlet需要实现WebServlet并且实现name和urlMapping 重启进行访问 http://localhost:8090/myServlet (2).自定义html 重启进行访问 http://loc…...

JS逆向进阶篇【去哪儿旅行登录】【下篇-逆向Bella参数JS加密逻辑Python生成】

目录&#xff1a; 每篇前言&#xff1a;引子——本篇目的1、 代码混淆和还原&#xff08;1&#xff09;单独替换&#xff1a;&#xff08;2&#xff09;整个js文件替换&#xff1a; 2、算法入口分析3、 深入分析&#xff08;0&#xff09;整体分析&#xff1a;&#xff08;1&am…...

【机器学习】生成对抗网络GAN

概述 生成对抗网络&#xff08;Generative Adversarial Network&#xff0c;GAN&#xff09;是一种深度学习模型架构&#xff0c;由生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;两部分组成&#xff0c;旨在通过对抗训练的方式生成逼…...

centos7安装kafka、zookeeper

安装jdk 安装jdk8 安装zookeeper 在指定目录执行下载命令 我是在/newdisk/zookeeper目录下 wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz --no-check-certificate下载好后并解压 tar -zxvf apache-zookeeper-3.5…...

基于 STM32U5 片内温度传感器正确测算温度

目录预览 1、引言 2、问题 3、小结 01 引言 STM32 在内部都集成了一个温度传感器&#xff0c;STM32U5 也不例外。这个位于晶圆上的温度传感器虽然不太适合用来测量外部环境的温度&#xff0c;但是用于监控晶圆上的温度还是挺好的&#xff0c;以防止芯片过温运行。 02 问题…...

【比较mybatis、lazy、sqltoy、mybatis-flex、easy-query操作数据】操作批量新增、分页查询(三)

orm框架使用性能比较 比较mybatis、lazy、sqltoy、mybatis-flex、easy-query操作数据 环境&#xff1a; idea jdk17 spring boot 3.0.7 mysql 8.0测试条件常规对象 orm 框架是否支持xml是否支持 Lambda对比版本mybatis☑️☑️3.5.4sqltoy☑️☑️5.2.98lazy✖️☑️1.2.4…...

Leetcode 3068. Find the Maximum Sum of Node Values

Leetcode 3068. Find the Maximum Sum of Node Values 1. 解题思路2. 代码实现 题目链接&#xff1a;3068. Find the Maximum Sum of Node Values 1. 解题思路 这一题虽然标记为一道hard的题目&#xff0c;但其实就是一个脑筋急转弯的题目。 我们只需要想明白一点即可&…...

用 Dockerfile为镜像添加SSH服务

1、基础镜像ubuntu:18.04 2、替换为国内的安装源 3、安装openssh-server 4、允许root用户远程登陆 5、暴露端口22 6、服务开机自启动 1.创建目录 [rootopenEuler-node1 db]# mkdir sshd_ubuntu 2.创建 Dockerfile、 run.sh 、authorized_keys、vim aliyun.list 文件 [rootop…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

解析“道作为序位生成器”的核心原理

解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制&#xff0c;重点解析"道作为序位生成器"的核心原理与实现框架&#xff1a; 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源&#xff0c;提供了很全面的思路&#xff0c;减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接&#xff1a;https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架&#xff1a; 代码框架结构&#xff1a;readme有…...