springboot-配置文件

Author Avatar
丁起男 08月 30,2021
  • 在其它设备中阅读本文章

springboot-配置文件

springboot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(yaml)进行配置

在同一目录下配置文件优先级:properties>yml>yaml

yaml

yaml文件是以数据为核心的,比传统的xml方式更加简洁

yaml文件的扩展名可以使用yaml或yml

语法

  • 大小写敏感
  • 数据值前边必须有空格,作为分隔符
  • 使用缩进表示层级关系
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • #表示注释,从这个字符直到行尾,都会被解析器忽略

数据格式

  • 对象:键值对集合

    person:
    	name: zhangsan
    	age: 20
    #行内写法
    person: {name: zhangsan,age: 20}
    
  • 数组:一组按次序排列的值

    address:
    	- beijing #使用`-`表示数组每个元素
    	- shanghai
    #行内写法
    address: [beijing,shanghai]
    
  • 纯量:单个的、不可再分的值

    msg1: 'hello \n yml' #单引号忽略转义字符
    msg2: "hello \n yml" #双引号识别转义字符
    

参数引用

可以使用${key}的方式复用其他key的值

name: lisi
name2: ${name} 

注意:行内写法无法使用参数引用

读取配置

  • @Value

    • 获取纯量:@Value("${key}")
    • 获取对象:@Value("${object.key}")
    • 获取数组:@Value("${keys[index]}")
  • Environment

    • 获取纯量:environment.getProperty("key")
    • 获取对象:environment.getProperty("object.key")
    • 获取数组:environment.getProperty("keys[index]")
  • @ConfigurationProperties

    1. 配置文件

      person:
        name: zhangsan
        age : 20
        address:
          - beijing
          - shanghai
      
    2. 实体类

      @Data
      @Component
      @ConfigurationProperties(prefix = "person") 
      public class Person {
          private String name;
          private int age;
          private String[] address;
      }
      

    可以添加依赖实现提示功能

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

profile

profile功能就是进行动态配置切换的

配置

  • 多文件方式:创建多个环境的配置文件,文件名application-自定义环境名.yml

  • 单文件多文档方式:在application.yml中使用---进行分割

    ---
    # 文档1
    spring:
      profiles: 环境名1
    # ...
    ---
    # 文档2
    spring:
      profiles: 环境名2
    # ...
    ---
    

激活

  • 配置文件

    spring:
         profiles:
           active: 环境名
    
  • 虚拟机参数:启动时添加参数-Dspring.profiles.active=环境名

  • 命令行参数:启动时添加参数--spring.profiles.active=环境名

配置文件位置

springboot启动时,会从以下位置加载配置文件,加载优先级由高到低为:

  1. 当前项目的/config目录下
  2. 当前项目的根目录
  3. classpath的/config目录
  4. classpath的根目录

配置冲突时,优先级高的生效

注意:1和2方式是不会打入jar包的,需要启动时使用--spring.config.location=配置文件路径

或将配置文件负责到target目录下,并在此目录下启动项目