• YAML配置文件


    YAML配置文件

    SpringBoot中application.properties文件存在的问题:配置太多后难阅读和修改,层级结构辨识度不高。

    简介

    YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。
    特点:
    层次分明,方便读写,
    使用.yaml或.yml作为文件后缀

    基本语法

    • 大小写敏感
    • 使用缩进表示层级关系
    • k: v,使用空格分隔k,v
    • 缩进时不允许使用Tab键,只允许使用空格
    • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
    • #表示注释,从这个字符一直到行尾,都会被解析器忽略
    #1、k: v v之前是空格区分
    #2、属性有层级关系,使用下一行,空两个空格
    server:
      port: 8080
    
    spring:
      data:
        redis:
          host: localhost
          port: 6379
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    支持的写法
    • 对象:键值对的集合,如映射(map)/哈希(hash)/字典(dictionary)
    • 数组:一组按次序排列的值,如:序列(sequence)/列表(list)
    • 纯量:单个的、不可再分的值,如:字符串、数字、bool、日期

    具体使用

    示例

    1、创建SpringBoot模块

    在这里插入图片描述

    2、创建实体

    Dog

    package com.louis.bean;
    
    
    public class Dog {
        private String name;
        private String age;
        public Dog() {
        }
        public Dog(String name, String age) {
            this.name = name;
            this.age = age;
        }
        public void setName(String name) {
            this.name = name;
        }
        public void setAge(String age) {
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public String getAge() {
            return age;
        }
    
        @Override
        public String toString() {
            return "Dog{" +
                    "name='" + name + '\'' +
                    ", age='" + age + '\'' +
                    '}';
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    Person

    package com.louis.bean;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    
    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
        private String lastName;
        private Integer age;
        private Boolean boss;
        private Date birth;
        private Map<String, Object> maps;
        private List<Object> lists;
        private Dog dog;
        public Person() {
        }
        public String getLastName() {
            return lastName;
        }
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        public Boolean getBoss() {
            return boss;
        }
        public void setBoss(Boolean boss) {
            this.boss = boss;
        }
        public Date getBirth() {
            return birth;
        }
        public void setBirth(Date birth) {
            this.birth = birth;
        }
        public Map<String, Object> getMaps() {
            return maps;
        }
        public void setMaps(Map<String, Object> maps) {
            this.maps = maps;
        }
        public List<Object> getLists() {
            return lists;
        }
        public void setLists(List<Object> lists) {
            this.lists = lists;
        }
        public Dog getDog() {
            return dog;
        }
        public void setDog(Dog dog) {
            this.dog = dog;
        }
        public Person(String lastName, Integer age, Boolean boss, Date birth, Map<String, Object> maps, List<Object> lists, Dog dog) {
            this.lastName = lastName;
            this.age = age;
            this.boss = boss;
            this.birth = birth;
            this.maps = maps;
            this.lists = lists;
            this.dog = dog;
        }
        @Override
        public String toString() {
            return "Person{" +
                    "lastName='" + lastName + '\'' +
                    ", age=" + age +
                    ", boss=" + boss +
                    ", birth=" + birth +
                    ", maps=" + maps +
                    ", lists=" + lists +
                    ", dog=" + dog +
                    '}';
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    3、创建application.yml

    在resources下新建一个配置文件application.yml,并添加如下的内容。

    #复杂对象
    person:
      lastName: 张三
      age: 18
      boss: false
      birth: 1990/12/12
      maps: { k1: v1,k2: 12 }
      lists:
    # 数组也可以使用["lisi","zhaoliu"]
        ‐ lisi
        ‐ zhaoliu
      dog:
        name: 迪迪
        age: 5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    4、测试
    package com.louis;
    
    import com.louis.bean.Person;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Boot304Application {
    
        public static void main(String[] args) {
            var ioc = SpringApplication.run(Boot304Application.class, args);
            Person bean1 = ioc.getBean(Person.class);
            System.out.println("person = " + bean1);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    🚀使用细节

    在yaml中我们还可以使用松散绑定这一操作。如:birthDay推荐写为birth-day,可以实现驼峰命名和中划线的转换

    文本
    • 单引号不会转义('\n’表示一个普通字符串)
    • 双引号会转义("\n"会显示为换行符)

    在这里插入图片描述
    在这里插入图片描述

    大文本
    • | 开头,大文本写在下层,保留文本格式,换行符正确显示

    在这里插入图片描述
    在这里插入图片描述

    • > 开头,大文本写在下层,折叠换行符,如果文本存在缩进则保留原来的格式,没有缩进的情况下压缩格式

    在这里插入图片描述
    在这里插入图片描述

    多文档合并
    • 使用—可以把多个yaml文档合并在一个文档中,每个文档区依然认为内容独立
    # 第一个 YAML 文档
    name: John
    age: 30
    
    ---
    
    # 第二个 YAML 文档
    name: Alice
    age: 25
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    【中秋怎么过】许一个愿,希望成都不要在静默管理中过中秋
    Docker:创建主从复制的Redis集群
    Unity程序员如何提升自己的能力
    Leetcode 142. 环形链表 II
    20 mysql const 查询
    记一次cpu飙升问题排查
    Xamarin实现App展示启动界面
    java计算机毕业设计web扶贫产品物资管理平台源码+mysql数据库+系统+lw文档+部署
    “熊猫视图”.Net图形控件功能介绍 [二]:一行代码实现图形图像缩放平操作
    代码随想录算法训练营第四十六天 | LeetCode 139. 单词拆分、多重背包、背包总结
  • 原文地址:https://blog.csdn.net/xry12354/article/details/132781556