SpringBoot的profile特性详解

概述

spring-boot(以下简称boot)中,profile属性源优先级仅高于defaultProperties,相比其他属性源优先级都要低.

profile属性文件完整位置由以下概念组成:

fileLocation = location + name [+ "-" + activeProfile] + "." + extension

应用启动时,会枚举所有可能的fileLocation.可简单理解为以下代码:

for (activeProfile : activeProfiles) {
  for (location : searchLocations) {
    for (name : names) {
      for (extension : extensions) {
        load(location, name, activeProfile, extension);
      }
    }
  }
}

当然,实际代码还是比较复杂的,感兴趣的同学可以查看org.springframework.boot.context.config.ConfigFileApplicationListener#postProcessEnvironment

关于location

location代表boot搜索profile属性文件的位置,默认情况下,boot会搜索以下位置:

  • file:./config/:应用工作目录的config子目录
  • file:./config/*/:应用工作目录下,config所有子目录
  • file:./:应用的当前工作目录
  • classpath:/config/:类路径下的config子目录
  • classpath:/:类路径下
    如果不像使用默认搜索位置,可通过spring.config.location进行重新配置,
    如果想在默认搜索位置基础上,增加额外的搜索位置,也可以通过spring.config.additional-location进行新增.
    多个位置之间,分隔,且位置字符串支持以*作为通配符.
    多个位置的优先级按照从低到高排列,也就是先配置的profile优先级会最低.

注意:location可以是目录,也可以是文件.
如果以/结尾,则boot认为其是目录,否则认为是文件.
如果location为文件,则boot直接进行定位和加载,不再使用name的概念.
如果location为目录,则boot会进一步获取name.

关于name

默认的name为application,也可以通过spring.config.name进行修改.
多个name之间,分隔,且支持*作为通配符.

关于extension

boot支持不同的文件类型扩展名,不同类型的文件由不同的PropertySourceLoader实现进行解析.
默认情况下:

  • PropertiesPropertySourceLoader支持properties文件和xml文件
  • YamlPropertySourceLoader支持yml文件和yaml文件
    注意:读取单个属性文件时,可能会得到多个属性源,因为想yml格式这样的文件支持多文档.

你可能感兴趣的:(SpringBoot的profile特性详解)