重学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: value
    child-key2: value2

示例

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

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

示例

YAML 数组

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

- A
- B
- C

示例

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

key: [value1, value2, ...]

示例

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

-
 - A
 - B
 - C

示例

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

list:
 -
  id: 1
  name: n1
 -
  id: 2
  name: 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.0

  YAML 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'  #可以使用双引号或者单引号包裹特殊字符
    - newline
      newline2    #字符串可以拆成多行,每一行会被转化成一个空格
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: &defaults
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *defaults

test:
  database: myapp_test
  <<: *defaults

示例

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

YAML 文件结构

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

server:
  port: 8080
  context-path: /api

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: user
    password: pass
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

myapp:
  feature:
    enabled: true
    security:
      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/mydb
    username: dbuser
    password: dbpass
    driver-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 备忘清单

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

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

相关文章

LabVIEW起重机工作参数远程监测系统

LabVIEW起重机工作参数远程监测系统 随着起重机技术的持续发展&#xff0c;对其工作参数的实时监控需求日益增加。设计了一个基于LabVIEW和TBox的起重机工作参数远程监测系统&#xff0c;能够实现起重机工作参数的实时采集、传输、解析和显示&#xff0c;有效提升起重机的性能…

【Linux-shell系列】多脚本同时启动

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

基于51单片机风速仪风速测量台风预警数码管显示

基于51单片机风速仪风速测量报警数码管显示 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真4. 程序代码5. 设计报告6. 设计资料内容清单&&下载链接资料下载链接&#xff1a; 基于51单片机风速仪风速测量报警数码管显示( proteus仿真程序设计报告讲解视频&…

Elasticsearch:使用 Streamlit、语义搜索和命名实体提取开发 Elastic Search 应用程序

作者&#xff1a;Camille Corti-Georgiou 介绍 一切都是一个搜索问题。 我在 Elastic 工作的第一周就听到有人说过这句话&#xff0c;从那时起&#xff0c;这句话就永久地印在了我的脑海中。 这篇博客的目的并不是我出色的同事对我所做的相关陈述进行分析&#xff0c;但我首先…

第 5 章 ROS常用组件坐标msg消息(自学二刷笔记)

重要参考&#xff1a; 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 在ROS中内置一些比较实用的工具&#xff0c;通过这些工具可以方便快捷的实现某个功能或调试程序&#xff0c;从…

仿牛客网项目---关注模块的实现

本篇文章是关于我的项目的关注模块的开发。 关注模块的开发实现了用户之间的关注功能和关注列表的展示。通过使用相应的服务类处理关注和取消关注操作&#xff0c;并利用用户服务类获取用户信息&#xff0c;实现了关注功能的存储和查询。同时&#xff0c;通过触发关注事件&…

记一次:android学习笔记一(学习目录-不要看无内容)

学习目录如下 B站学习的名称--Android开发从入门到精通(项目案例版) 网址:https://www.bilibili.com/video/BV1jW411375J/ 第0章:安装 android stoid 参考地址https://blog.csdn.net/adminstate/article/details/130542368 第一章:第一个安卓应用 第二章:用户界面设…

SpringBoot使用MongoTemplate详解

1.pom.xml引入Jar包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> 2.MongoDbHelper封装 /*** MongoDB Operation class* author HyoJung* date …

37.云原生之springcloud+k8s+GitOps+istio+安全实践

云原生专栏大纲 文章目录 准备工作项目结构介绍配置安全测试ConfigMapSecret使用Secret中数据的方式Deployment使用Secret配置Secret加密 kustomize部署清单ConfigMap改造SecretSealedSecretDeployment改造Serviceistio相关资源DestinationRuleGatewayVirtualServiceServiceAc…

(3)(3.2) MAVLink2数据包签名(安全)

文章目录 前言 1 配置 2 使用 3 MAVLink协议说明 前言 ArduPilot 和任务计划器能够通过使用加密密钥添加数据包签名&#xff0c;为空中 MAVLink 传输增加安全性。这并不加密数据&#xff0c;只是控制自动驾驶仪是否响应 MAVLink 命令。 当自动驾驶仪处于激活状态时&#x…

未来已来!AI大模型引领科技革命

未来已来&#xff01;AI大模型正以惊人的速度引领着科技革命。随着科技的发展&#xff0c;人工智能在各个领域展现出了非凡的能力和潜力&#xff0c;大模型更是成为了科技领域的明星。从自然语言处理到图像识别&#xff0c;从智能推荐到语音识别&#xff0c;大模型的应用正在改…

python自学3

第一节第六章 数据的列表 列表也是支持嵌套的 列表的下标索引 反向也可以 嵌套也可以 列表的常用操作 什么是列表的方法 学习到的第一个方法&#xff0c;index&#xff0c;查询元素在列表中的下标索引值 index查询方法 修改表功能的方法 插入方法 追加元素 单个元素追加 多…

如何应对IT服务交付中的问题?

如何应对IT服务交付中的问题&#xff1f; 按需交付服务的挑战IT服务体系的复杂性恶性循环的形成学会洞察的重要性书籍简介参与方式 按需交付服务的挑战 一致性、可靠性、安全性、隐私性和成本效益的平衡&#xff1a;成功的按需交付服务需要满足这些要求&#xff0c;这需要服务…

2024年UI排版风格解析,经典模板一键复用!

在UI设计工作中&#xff0c;如何保证版式设计的“美观 合理”是经常需要考虑问题。经过了多年的设计工作后&#xff0c;笔者发现新人设计师的尤其容易陷入对流行趋势的简单模仿&#xff0c;缺失对排版本身的逻辑性认知。在这篇文章中&#xff0c;笔者将盘点10个经典UI排版案例…

PCL中的点云分割模型的部分常用参数含义

PCL中的SacModel类别常用参数含义 1、SACMODEL_PLANE2、SACMODEL_LINE&#xff08;三维直线&#xff09;3、SACMODEL_CIRCLE2D&#xff08;二维圆&#xff09;4、SACMODEL_CIRCLE3D&#xff08;三维圆&#xff09;5、SACMODEL_SPHERE&#xff08;球&#xff09;6、SACMODEL_CYL…

Jenkins 将shell脚本启动方式修改为bash

platform"arm x86" if [[ "$platform" ~ "arm" ]] thenecho "arm" fi最近在调试Jenkins实现的一些功能&#xff0c;发现在本地可以运行的脚本内容到了Jenkins里面就没办法运行了&#xff0c;不是提示unexpected operator就是提示[[ : …

Uni-ControlNet: All-in-One Control toText-to-Image Diffusion Models——【论文笔记】

本文发表于NeurIPS 2023 项目官网&#xff1a;Uni-ControlNet: All-in-One Control to Text-to-Image Diffusion Models 一、Introduction 近两年来&#xff0c;扩散模型在图像合成任务中表现优异&#xff0c;尤其是文本到图像&#xff08;T2I&#xff09;扩散模型已成为合成高…

WebGIS开发0基础必看教程:地图显示——根据地理范围换算出瓦片行列号

2.影像金字塔简介 我们之前反复提到了影像金字塔这个概念&#xff0c;但是没有对其做一个大概的介绍&#xff0c;这里我将这个概念补充一下。 2.1 为什么要出现影像金字塔这个概念 现在&#xff0c;我假设我们的服务器上有一个1G的影像&#xff0c;需要将其在前端进行显示。…

2024全网最全Excel函数与公式应用

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 引言 Excel是一款广泛应用于商业、教育和个人…

hnust 湖南科技大学 2022 数据挖掘课设 完整代码+报告+图源文件+指导书

hnust 湖南科技大学 2022 数据挖掘课设 完整代码报告图源文件指导书 目录 实验一 Apriori算法设计与应用 - 1 - 一、 背景介绍 - 1 - 二、 实验内容 - 1 - 三、 实验结果与分析 - 2 - 四、 小结与心得体会 - 3 - 实验二 KNN算法设计与应用 - 4 - 一、 背景介绍 - 4 - 二、 实…