• yaml初识


    一·概述

    • YAML是 “YAML Ain’t a Markup Language” (YAML不是一种标记语言)的递归缩写。
    • 在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。
    • 这种语言以数据做为中心,而不是以标记语言为重点!

    1.1 XML&YAML/YML

    • XML&YAML都是spring boot使用的一个全局的配置文件,配置文件名称是固定的。
    • 作用【在spring boot中】:修改spring boot的默认配置。
    <server>
    <port>8081<port>
    server>
    //语法结构 : key=value
    
    server:
    	prot: 8080
    	//语法结构 :key:空格 value
    

    1.2 基础·语法

    • 语法严格
      • 键值对之间的空格不可以省略。
      • 属性和值的大小写都是敏感的
      • 使用缩进来控制层级关系,只要是左边对齐的一列数据都是同一个级别的

    1.2.1 字面量·格式

    • 字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;
    k: v #字面量:普通的值【数字,布尔值、字符串】
    
    • 注意:
      • “”双引号,里面的特殊字符不会被转义。如“\n”仍然表示换行
      • ‘’单引号,会转义特殊字符,特殊字符最终会变成和普通字符一样输出。

    1.2.2 对象&Map·格式

    # 第一种写法
    k:
    	v1:
    	v2:
    #第二种写法
    k:{v1:xxx,v2:xxx}
    

    1.2.3 数组·(List/set)

    #第一种写法:用 - 值表示数组中的一个元素
    k:
    	- x
    	- y
    	- z
    #第二种写法
    k:[xxx,xxx,xxx]
    

    二·YAML注入配置文件

    • yaml文件更强大的地方在于,可以给实体类直接注入匹配值
    • 举例:
    1. 首先在实体类中注册组件
    /*
    @ConfigurationProperties作用:
    将配置文件中配置的每一个属性的值,映射到这个组件中;
    告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
    参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
    */
    @Component //注册bean
    @ConfigurationProperties(prefix = "person")
    
    1. 导入依赖
    
    <dependency>
    	<groupId>org.springframework.bootgroupId>
    	<artifactId>spring-boot-configuration-processorartifactId>
    	<optional>trueoptional>
    dependency>
    
    1. 在YAML中配置
    k:
    	v1:
    	v2:
    	v3:
    	v4:
    

    2.1 YAML·占位符

    person:
    	name: qinjiang${random.uuid} # 随机uuid
    	age: ${random.int} # 随机int
    dog:
    	# 引用person.name的值,如果不存在就用 :后面的值,即 other,然后拼接上_旺财
    	name: ${person.name:other}_旺财
    

    三·加载指定配置文件

    • @PropertySource :加载指定的配置文件;
    • @configurationProperties:默认从全局配置文件中获取值;
    @PropertySource(value = "classpath:xxx.properties")
    //classpath指向的是resources下的目录
    

    3.1 value·注入方式

    • 【注意】properties配置文件在写中文的时候,会有乱码 , 我们需要去IDEA中设置编码格式为UTF-8;
      settings–>FileEncodings 中配置
    • 如下:
    @Component //注册bean
    @PropertySource(value = "classpath:user.properties")
    public class User {
    	//直接使用@value
    	@Value("${user.name}") //从配置文件中取值
    	private String name;
    	@Value("#{9*2}") // #{SPEL} Spring表达式
    	private int age;
    	@Value("男") // 字面量
    	private String sex;
    }
    
    • user.properties
    user1.name=kuangshen
    user1.age=18
    user1.sex=男
    

    四·多环境切换

    • profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境;

    4.1 多文件方式

    • 文件名可以是 application-{profile}.properties
    • 例如:application-test.properties 代表测试环境配置 application-dev.properties 代表开发环境配置
    • 但是Springboot并不会直接启动这些配置文件,它默认使用application.properties主配置文件
    #比如在配置文件中指定使用dev环境,我们可以通过设置不同的端口号进行测试;
    #我们启动SpringBoot,就可以看到已经切换到dev下的配置了;
    spring.profiles.active=dev
    

    4.2 YAML【多文档块方式】

    • 使用yml去实现不需要创建多个配置文件
    #选择要激活那个环境块
    spring:
    	profiles:
    		active: prod
    ---
    server:
    	port: 8083
    spring:
    	profiles: dev #配置环境的名称
    ---
    server:
    	port: 8084
    spring:
    	profiles: prod #配置环境的名称
    
    • 注意:如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配
      置文件的!

    五·配置文件的加载优先级

    • springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的
      默认配置文件
    • 优先级1:项目路径下的config文件夹配置文件
    • 优先级2:项目路径下配置文件
    • 优先级3:资源路径下的config文件夹配置文件
    • 优先级4:资源路径下配置文件
    • 优先级由高到底,高优先级的配置会覆盖低优先级的配置
  • 相关阅读:
    8086 汇编笔记(十):标志寄存器
    C#使用iText7将多个PDF文档合并为单个文档
    iptables详解:链、表、表链关系、规则的基本使用
    二叉树及其应用(增删改查)
    【最强最全车牌识别算法】支持13种中文车牌识别的云端API部署(可直接获取源码使用)
    python获取时间字符串的时间差
    20220831-basic-cuda-interface
    建材业深陷数字化困局,B2B协同系统标准化交易流程,解决企业交易网络化难题
    SAP-写了一个FUNCTION,用于读取订单中,指定工序的状态。
    【Spring Boot】035-Spring Boot 整合 MyBatis Plus
  • 原文地址:https://blog.csdn.net/yang2330648064/article/details/126941726