• SpringBoot保姆级教程(四)YAML文件


    目录

    一.配置文件介绍

    二.自定义配置简单数据

    三.自定义配置对象数据

    四.自定义配置集合数据

    五.读取配置文件的数据

    六.使用@ConfigurationProperties读取

    七.占位符的使用

    八.配置文件存放位置及优先级

    九.bootstrap配置文件


    一.配置文件介绍

    SpringBoot 项目中,大部分配置都有默认值,但如果想替换默认配置的话,就可以使用application.properties 或者 application.yml 进行配置。
    SpringBoot 默认会从 resources 目录下加载 application.properties或application.yml 文件。其中, application.properties 文件是键值对类型的文件,之前一直在使用,所以我们不再对properties 文件
    进行阐述。
    https://docs.spring.io/spring-boot/docs/2.7.0-M1/reference/htmlsingle/#application-properties.server 可以查找配置文件如何覆盖SpringBoot 项目的默认配置。
    除了 properties 文件外, SpringBoot 还支持 YAML 文件进行配置。
    YAML 文件的扩展名为 .yml .yaml ,它的基本要求如下:
    1. 1 大小写敏感
    2. 2 使用缩进代表层级关系
    3. 3 相同的部分只出现一次
    比如使用 properties 文件配置 tomcat 端口:
    server.port=8888
    而使用 YAML 文件配置 tomcat 端口:
    1. server:
    2. port: 8888

    二.自定义配置简单数据

    除了覆盖默认配置,我们还可以 在YAML文件中 配置其他信息以便我们在项目中使用。配置简单数据的方式如下:
    语法 :
    数据名 :
    新建一个YAML文件application.yml,以下数据可以写在application.yml中,当然写在 application.properties中应该也行,我就不试了。
    示例代码:
    name :[空格] Tom
    注意:value之前有一个空格(key: value)

    三.自定义配置对象数据

    语法:

     对象:

            属性名1 :[空格] 属性值
            属性名2 :[空格] 属性值
    # 或者
    对象 :[空格]{ 属性名 1 :[空格] 属性值 , 属性名 2 :[空格] 属性值 }

    示例代码:

    # 学生 1
    student1 :
            sex : female
            age : 10
            address : beijing
    # 学生 2
    student2 : { sex : female , age : 10 , address beijing }

     

    属性名前面的空格个数不限,在yml语法中,相同缩进代表同一 个级别,只要每个属性前的空格数一样即可。

     

    四.自定义配置集合数据

    语法

    集合 :
      -[空格] 值1
      -[空格] 值2
    # 或者
    集合 :[空格][ 1 , 2 ]

     

     示例:

    #自定义配置集合数据
    #城市
    city1:
      - beijing
      - tianjin
      - shanghai
      - chongqing
    
    city2: [beijing,tianjin,shanghai,chongqing]
    
    #元素是对象的集合
    students:
      - name: Jack
        age: 18
        score: 100
      - name: Sam
        age: 28
        score: 88
      - name: li
        age: 27
        score: 90

    注意:值与之前的 - 之间存在一个空格 

     

    五.读取配置文件的数据

    使用@Value读取

    我们可以通过 @Value 注解将配置文件中的值映射到一个 Spring 管理的Bean 的字段上,用法如下:
    1
    配置文件
    读取配置文件数据:
    @Value 只能映射简单数据类型,不能将 yaml 文件中的对象、集合映射到属性中。

     在controller包下创建一个YmlController1类

    1. import org.springframework.beans.factory.annotation.Value;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import org.springframework.web.bind.annotation.ResponseBody;
    5. @Controller
    6. public class YmlController1 {
    7. @Value("${name}")
    8. private String name;
    9. @Value("${student1.age}")
    10. private int age;
    11. @Value("${city1[0]}")
    12. private String city1;
    13. //students集合中的第一个元素的score属性
    14. @Value("${students[0].score}")
    15. private double score1;
    16. @RequestMapping("/yml1")
    17. @ResponseBody
    18. public String yml1(){
    19. System.out.println(name);
    20. System.out.println(age);
    21. System.out.println(city1);
    22. System.out.println(score1);
    23. return "hello springboot!";
    24. }
    25. }

    控制台输出:

    1. Tom
    2. 10
    3. beijing
    4. 100.0

     六.使用@ConfigurationProperties读取

    通过 @ConfigurationProperties(prefifix="对象") 可以将配置文件中的配置自动与实体进行映射,这样可以将yml 文件中配置的对象属性直接映射到Bean当中。
    1
    配置文件
    在application.yml中添加如下配置信息:
    1. user:
    2. id: 10086
    3. username: July
    4. address:
    5. - beijing
    6. - tianjin
    7. - shanghai
    8. - chongqing
    9. grades:
    10. - subject: math
    11. score: 100
    12. - subject: English
    13. score: 90
    实体类
    在com.first下创建Grade类
    1. public class Grade {
    2. private String subject;
    3. private double score;
    4. //省略get/set/toString方法
    5. }
    读取配置文件
    在controller包下创建YmlController2
    1. import com.first.domain.Grade;
    2. import org.springframework.boot.context.properties.ConfigurationProperties;
    3. import org.springframework.stereotype.Controller;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. import java.util.List;
    7. @Controller
    8. @ConfigurationProperties(prefix = "user")
    9. public class YmlController2 {
    10. private int id;
    11. private String username;
    12. private List address;
    13. private List grades;
    14. @RequestMapping("/yml2")
    15. @ResponseBody
    16. public String yml2(){
    17. System.out.println(id);
    18. System.out.println(username);
    19. System.out.println(address);
    20. System.out.println(grades);
    21. return "hello springboot!";
    22. }
    23. //省略get/set/toString方法
    24. }

    启动项目,访问localhost:8888/yml2

     

    控制台输出:

    1. 10086
    2. July
    3. [beijing, tianjin, shanghai, chongqing]
    4. [Grade{subject='math', score=100.0}, Grade{subject='English', score=90.0}]

    七.占位符的使用

    YAML 文件中可以使用 ${} 占位符,它有两个作用:
    使用配置文件中的值
    编写配置文件
    1. server:
    2. port: 8888
    3. myconfig:
    4. myport: ${server.port}
    读取配置文件
    1. @Controller
    2. public class YmlController3 {
    3.    @Value("${myconfig.myport}")
    4.    private int port;
    5.    @RequestMapping("/yml3")
    6.    @ResponseBody
    7.    public String yml3(){
    8.        System.out.println(port);
    9.        return "hello springboot!";
    10.   }
    11. }

    使用框架提供的方法

    SpringBoot 框架提供了一些生成随机数的方法可以在 yml 文件中使用:
    • ${random.value} :生成类似uuid的随机数,没有"-"连接
    • ${random.uuid} :生成一个uuid,有短杠连接
    • ${random.int} :随机取整型范围内的一个值
    • ${random.int(10)}:随机生成一个10以内的数
    • ${random.int(100,200)}:随机生成一个100-200 范围以内的数
    • ${random.long}:随机取长整型范围内的一个值
    • ${random.long(100,200)}:随机生成长整型100-200范围内的一个值
    用法举例如下:
    直接在配置文件里如下写即可,其他写法自己试试
    1. # 随机生成tomcat端口(端口号是1024-9999范围以内的数)
    2. server:
    3. port: ${random.int(1024,9999)}

     

    八.配置文件存放位置及优先级

    配置文件有如下存放位置:
    • 项目根目录下
    • 项目根目录下的/config子目录中
    • 项目的resources目录中
    • 项目的resources下的/config子目录中
    这些目录下都可以存放两类配置文件,分别是 application.yml application.properties ,这些配置文件的优先级 从高到低依次为
    项目根目录下(即直接右键项目新建)的 /config 子目录中
    • config/application.properties (优先级第一)
    • config/application.yml(优先级第二)
    项目根目录下
    • application.properties(优先级第三)
    • application.yml(优先级第四)
    项目的 resources 下的 /config 子目录中
    • resources/config/application.properties(优先级第五)
    • resources/config/application.yml(优先级第六)
    项目的 resources 目录中(最常用)
    • resources/application.properties(优先级第七)
    • resources/application.yml(优先级第八)
    优先级高的文件会覆盖优先级低的文件中的配置

     

    九.bootstrap配置文件

    目前用不到,做分布式的时候能用到,这里做了解即可!
    SpringBoot 中有两种容器对象,分别是 bootstrap application ,bootstrap是应用程序的父容器, bootstrap 加载优先于applicaton。 bootstrap 配置文件主要对 bootstrap 容器进行配置,application配置文件是对 applicaton 容器进行配置。bootstrap配置文件也同样支持 properties yml 两种格式,主要用于从外部引入Spring 应用程序的配置。
    bootstrap配置文件特征
    • boostrap由父ApplicationContext加载,比applicaton优先加载。
    • boostrap里面的属性不能被覆盖。
    bootstrapapplication的应用场景
    • application配置文件主要用于SpringBoot项目的自动化配置。
    • bootstrap配置文件有以下几个应用场景。
    1. 使用Spring Cloud Config配置中心时,需要在bootstrap配置文件中添加连接到配置中 心的配置属性来加载外部配置中心的配置信息。
    2. 一些固定的不能被覆盖的属性。
    3. 一些加密/解密的场景。

     

  • 相关阅读:
    Johnson 全源最短路
    Linux C 线程
    Dubbo捕获自定义异常问题
    经典算法之希尔排序
    不同朝向的房间,怎么选择舒适的墙布颜色?-江南爱窗帘十大品牌
    前端有哪些好的学习网站?
    Linux命令截取文件部分内容
    5本Python书推荐,强化你的程式编程语言观念
    【嵌入式C】栈内存与printf,代码正确运行,删掉 printf 代码就崩溃了??
    泰坦尼克号幸存者数据分析
  • 原文地址:https://blog.csdn.net/weixin_44593822/article/details/127100429