目录

一.配置文件介绍

二.自定义配置简单数据

三.自定义配置对象数据

四.自定义配置集合数据

五.读取配置文件的数据

六.使用@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 端口:




server:
    port: 8888



二.自定义配置简单数据


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



语法 :




数据名 : 值



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类

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class YmlController1 {
    @Value("${name}")
    private String name;

    @Value("${student1.age}")
    private int age;

    @Value("${city1[0]}")
    private String city1;

    //students集合中的第一个元素的score属性
    @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!";
    }
}

spring boot yml可以使用占位符吗 springboot yml map_YAML文件

控制台输出:

Tom
10
beijing
100.0

使用@ConfigurationProperties读取


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


1


配置文件



在application.yml中添加如下配置信息:



user:
  id: 10086
  username: July
  address:
    - beijing
    - tianjin
    - shanghai
    - chongqing
  grades:
    - subject: math
      score: 100
    - subject: English
      score: 90



实体类




在com.first下创建Grade类




public class Grade {
    private String subject;
    private double score;

    //省略get/set/toString方法
}



读取配置文件




在controller包下创建YmlController2




import com.first.domain.Grade;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@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!";
    }

    //省略get/set/toString方法
}

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


 

spring boot yml可以使用占位符吗 springboot yml map_spring boot_02

控制台输出:

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

七.占位符的使用


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



使用配置文件中的值




编写配置文件




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



读取配置文件




@Controller
public class YmlController3 {
    @Value("${myconfig.myport}")
    private int port;
    @RequestMapping("/yml3")
    @ResponseBody
    public String yml3(){
        System.out.println(port);
        return "hello springboot!";
   }
}

使用框架提供的方法



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端口(端口号是1024-9999范围以内的数)
server:
    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里面的属性不能被覆盖。

bootstrap与application的应用场景


  • application配置文件主要用于SpringBoot项目的自动化配置。
  • bootstrap配置文件有以下几个应用场景。
  1. 使用Spring Cloud Config配置中心时,需要在bootstrap配置文件中添加连接到配置中 心的配置属性来加载外部配置中心的配置信息。
  2. 一些固定的不能被覆盖的属性。
  3. 一些加密/解密的场景。