Bootstrap

04YAML配置文件

目录

一、YAML文件_配置文件介绍

二、YAML文件_自定义配置简单数据

三、YAML文件_自定义配置对象数据

四、YAML文件_自定义配置集合数据

五、YAML文件_读取配置文件的数据

1. 使用@Value读取配置文件中数据

2.使用@ConfigurationProperties读取配置文件中数据

六、YAML文件_占位符的使用

1.使用配置文件中的值

 2.使用框架提供的随机生成数方法

七、YAML文件_配置文件存放位置及优先级

八、YAML文件_bootstrap配置文件

九、知识点整理:


项目结构:

一、YAML文件_配置文件介绍

SpringBoot 项目中,大部分配置都有默认值,但如果想替换默认配置的话,就可以使用application.properties 或者 application.yaml 进行配置。
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.大小写敏感

2.使用缩进代表层级关系

3.相同的部分只出现一次

比如使用properties文件配置tomcat端口:

server.port=8888

而使用YAML文件配置tomcat端口:

server :
        port : 8888

二、YAML文件_自定义配置简单数据

除了覆盖默认配置,我们还可以在 YAML 文件中配置其他信息以便我们在项目中使用。配置简单数据的方式如下:

语法:

数据名:

示例代码:

name : zhangsan

 注意:value之前有一个空格,即zhangsan于冒号之间一定要有一个空格隔开。

三、YAML文件_自定义配置对象数据

 语法:

对象 :
   属性名 1 : 属性值
   属性名 2 : 属性值
   # 或者
   对象 : { 属性名 1 : 属性值 , 属性名 2 : 属性值 }

示例代码:

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

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

四、YAML文件_自定义配置集合数据

 语法:

集合 :
  - 1
  - 2
  # 或者
  集合 : [ 1 , 2 ]
示例代码
# 城市
city1 :
  - beijing
  - tianjin
  -  shanghai
  - chongqing
city2 : [ beijing , tianjin , shanghai , chongqing ]
  # 集合中的元素是对象类型
  students :
    - name : baizhan
      age : 18
      score : 100
    - name : shangxuetang
      age : 28
      score : 88
    - name : chengxuyuan
      age : 38
      score : 90

 注意:值与前面的 - 之间存在一个空格,变量名和值之间也存在一个空格,千万不能错,不然无法赋值。

五、YAML文件_读取配置文件的数据

1. 使用@Value读取配置文件中数据

我们可以通过 @Value 注解将配置文件中的值映射到一个 Spring 管理的Bean 的字段上,用法如下:
1.yaml配置文件:
server:
  port: 8888

# 管理员用户名
name: zhangsan

# 学生1
student1:
  sex: female
  age: 10
  address: beijing

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

# 城市
city1:
  - beijing
  - shanghai
  - shenzhen
  - guangzhou

city2: [beijing,shanghai,shenzhen,guangzhou]

students:
  - name: zhangsan
    age: 18
    score: 88
  - name: lisi
    age: 19
    score: 89
  - name: wangli
    age: 20
    score: 100

2.读取配置文件数据:

@Controller
public class YmlController1 {

    //基本数据类型直接赋值
    @Value("${name}")
    private String name;

    //对象类型:对象.属性名
    @Value("${student1.age}")
    private int age;

    //集合基本数据类型:集合元素
    @Value("${city1[0]}")
    private String city1;

    //集合对象类型:集合元素下标.对象属性名
    @Value("${students[0].score}")
    private double score1;

    @RequestMapping("/yml1")
    @ResponseBody
    public String yml1(){
        System.out.println(name);
        System.out.println(age);
        System.out.println(city1);
        System.out.println(score1);
        return "hello,SpringBoot";
    }
}

3.运行结果:

注意:@Value只能映射简单数据类型,不能将yaml文件中的对象、集合映射到属性中,但可以映射对象、集合中的单个数据。

2.使用@ConfigurationProperties读取配置文件中数据

 通过 @ConfigurationProperties(prefix="对象") 可以将配置文件中的配置自动与实体进行映射,这样可以将yml文件中配置的对象属性直接映射到Bean当中。

1.配置文件:

user:
  #基本数据类型
  id: 1000
  username: chengxuyuan
  #集合基本数据类型
  address:
    - beijing
    - shanghai
    - shenzhen
    - guangzhou
  #对象类型
  grades:
    - subject: math
      score: 100
    - subject: english
      score: 100

2.实体类:

public class Grade {
    private String subject;
    private double score;
    // 省略getter/setter/tostring
}

3.读取配置文件

@Controller
//@ConfigurationProperties(prefix = "user")
//将配置文件中user对象与此实体类进行一一映射
@ConfigurationProperties(prefix = "user")
public class YmlController2 {
    private int id;
    private String username;
    private List<String> address;
    private List<Grade> grades;

    @RequestMapping("/yml2")
    @ResponseBody
    public String yml2(){
        System.out.println(id);
        System.out.println(username);
        System.out.println(address);
        System.out.println(grades);
        return "hello,SpringBoot";
    }
// 省略getter/setter/tostring

4.运行结果:

六、YAML文件_占位符的使用

 YAML文件中可以使用 ${} 占位符,它有两个作用:

1.使用配置文件中的值

1.编写配置文件

server:
 port: 8888
myconfig:
 myport: ${server.port}

2.读取配置文件

@Controller
public class YmlController3 {
    @Value("${myconfig.myport}")
    private int port;

    @RequestMapping("/yml3")
    @ResponseBody
    public String yml3(){
        System.out.println(port);
        return "hello,SpringBoot";
    }
}

3.运行结果:

 2.使用框架提供的随机生成数方法

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 范围内的一个值
用法如下:
 
# 随机生成tomcat端口
server:
   port: ${random.int(1024,9999)}

注意:端口号设置为1024-9999是因为:小于1024数值的端口号一般都被系统占用,一般没有5位数的端口号。

七、YAML文件_配置文件存放位置及优先级

配置文件优先级按由高到低有如下存放位置:
项目根目录下的 /config 子目录中
项目根目录下
项目的 resources 下的 /config 子目录中
项目的resources 目录中
项目根目录下的/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
优先级高的文件会覆盖优先级低的文件中的配置 ,同级目录下application.properties优先级大于application.yml

八、YAML文件_bootstrap配置文件

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

九、知识点整理:

1.SpringBoot配置文件格式为“propertiesyaml”

2.关于YAML文件,说法错误的是“大小写不敏感”

3.在YAML中,冒号与值之间要有一个“空格”

4.在yml语法中,“相同缩进”代表同一个级别

5.yml配置集合时,-与值之间要有“空格”

6.使用@Value 注解可以将配置文件中的值映射到Bean的属性中

7.使用@ConfigurationProperties 注解可以将配置文件中的对象自动与实体Bean进行映射

8.在SpringBoot中的yml文件中,“${random.int(10)} ” 生成一个10以内的随机整数

9.关于SpringBoot配置文件,“bootstrap比applicaton优先加载”

10.SpringBoot中,bootstrap配置文件支持的格式为“properties和yaml”

;