11.配置文件-yaml

1.key: value  kv之间有空格
2.大小写敏感
3.使用缩进表示层级关系
4.缩进的空格数不重要,只要相同层级的元素左对齐即可
5.'#'表示注释
6.字符串无需加引号,如果要加,"与"表示字符串内容  会被转义  /不转义
数据类型:

1.字面量:单个的,不可再分的值:date、booleab、String、number、null
    k: v

2.对象:键值对的集合。map、hash、set、object
    行内写法:k: {k1: v1,k2: v2,k3: v3}
    或者:
        k:
          k1: v1
          k2: v2
         k3: v3
         
3.数组:一组按照次序排列的值。array、list、queue
    行内写法: k: [v1,v2,v3]
    或者:
        k:
         - v1
         - v2
         - v3
例子:
1.有实体类:Person
    //1.lombok的get/set标签
    @Data
    //2.toString标签
    @ToString
    //3.全参构造器
    @AllArgsConstructor
    //4.无参构造器
    @NoArgsConstructor
    //5.绑定springboot的配置文件,前缀为perosn
    @ConfigurationProperties(prefix = "person")
    public class Person {
        private String name;
        private  Integer age;
        private List<Car> carList;
        private Map<String,Dog> dogMap;
        public Person(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
    }

2.application.yaml或者application.yml写法
    person:
      name: 吴孟达
      age: 18
      #carList属性绑定
      carList:
        - {name: 宝马,price: 60万}
        - name: 保时捷
          price: 100万
        - name: 路虎
          price: 200万
      #dogMap属性绑定
      dogMap:
          dog1: {name: 泰迪,age: 18}
          dog2:
              name: 金毛
              age: 17
  
3.控制类
    @RequestMapping("/getPerson")
    public Person getPerson(){
        return person;
    } 
输出:
    {"name":"吴孟达","age":18,"carList":[{"name":"宝马","price":"60万"},{"name":"保时捷","price":"100万"},{"name":"路虎","price":"200万"}],"dogMap":{"dog1":{"name":"泰迪","age":18},"dog2":{"name":"金毛","age":17}}}     
4.application.properties和application.yaml的加载顺序
    先加载application.properties中的数据,再加载application.yaml中的数据
    例如在application.properties中配置:
        person.name=刘丹
测试输出:发现名称变为properties中的名字
    {"name":"刘丹","age":18,"carList":[{"name":"宝马","price":"60万"},{"name":"保时捷","price":"100万"},{"name":"路虎","price":"200万"}],"dogMap":{"dog1":{"name":"泰迪","age":18},"dog2":{"name":"金毛","age":17}}}
yaml文件中加上''和""以及不加对转义字符的支持

.在控制类输出时:
    @RequestMapping("/getPerson")
    public Person getPerson(){
        //输出person的name属性作为测试标准
        System.out.println(person.getName());
        return person;
    }
1.当yaml文件中name属性不加单引号和双引号
    person:
      name: 吴孟达 \n 刘丹
      age: 18
      ..
  输出:(发现不加的话不支持转义:换行符不生效)
      吴孟达 \n 刘丹
      
2.加上单引号
    person:
      name: '吴孟达 \n 刘丹'
      age: 18
      ...
  输出:(发现加单引号不支持转义:换行符不生效)
      吴孟达 \n 刘丹
      
3.加上双引号
    person:
      name: "吴孟达 \n 刘丹"
      age: 18
      ...
  输出:(发现加上双引号支持转义:换行符生效)
      吴孟达
      刘丹
      
结论:加双引号,转义字符生效
yaml文件自定义类的自动提醒:

1.导入spring-boot-configuration-processor
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>


2.在maven的打包配置中除去spring-boot-configuration-processor,这个只是做一个提醒功能,没有必要打到包中
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                //排除提醒功能
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-configuration-processor</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
3.然后重新启动下项目就配置文件就可以自动提示了

 

posted @ 2022-05-11 21:38  努力的达子  阅读(79)  评论(0)    收藏  举报