SpringBoot学习(四)

252 阅读3分钟

这是我参与8月更文挑战的第11天,活动详情查看:8月更文挑战

SpringBoot的核心理念就配置信息的管理采用约定优于配置,开发人员在实际工作中基本不需进行配置就可以运行项目。

SpringBoot的配置体系

Profile

Profile本质上代表一种用于组织配置信息的维度,当SpringBoot项目中需要设置一系列的配置项模板时,可以针对这些模板分别创建Profile,即我们所说的开发、测试、生产等环境。 SpringBoot为了配置文件的集中化管理,对配置文件命名同样做了一定的约定,如使用label表示配置版本控制信息,profile表示配置文件所对应的环境信息。 SpringBoot同时支持.properties.yml两种配置文件格式,同时结合label和profile的概念,因此可以在SpringBoot中作为配置文件的命名方式有:

{application}.yml
{application}-{profile}.yml
{label}/{application}-{profile}.yml
{application}-{profile}.properties
{label}/{application}-{profile}.properties

SpringBoot多环境配置信息

SpringBoot支持将所有的Profile配置信息保存在一个文件中,只需要对这些信息按Profile进行组织处理。

spring: 
         profiles: test
         #test 环境相关配置信息
spring: 
         profiles: prod
         #prod 环境相关配置信息

但是并不推荐使用这种方式进行多个Profile配置信息的管理,而是应该使用更灵活的多配置文件来管理。

image.png

我们只需要在主配置文件application中指定需要激活的Profile:

#properties
spring.profiles.active = test
#yml
spring:
  profiles:
    active: test
    
#同时激活多个Profile
spring.profiles.active: prod, myprofile1, myprofile2

如果没有在主配置文件中指定激活的Profile,也可以在项目Jar的运行命令中进行指定:java –jar application.jar --spring.profiles.active=prod,这种实现方案在通过脚本自动化打包和部署的场景下经常使用。

配置文件的加载顺序

SpringBoot项目中允许将配置文件保存在多个路径下,而不同的路径下加载配置文件是具有不同的顺序。SpringBoot项目会在启动时依次扫描以下位置的application.properties或者application.yml文件来作为全局配置文件。

//项目路径下的config文件夹中的配置文件
–file:./config/
//项目根路径下的配置文件
–file:./

//项目src/resources目录下的config文件夹中
–classpath:/config/
//项目src/resources目录下
–classpath:/

Spring Boot 会全部扫描上图中的这四个位置,高优先级配置内容会覆盖低优先级配置内容。而如果高优先级的配置文件中存在与低优先级配置文件不冲突的属性,则会形成一种互补配置,也就是说会整合所有不冲突的属性。

针对SpringBoot中多个Profile配置文件信息,可以按照项目合适的方式进行管理,建议使用多个文件来替代在同一个文件中配置多个Profile的方式,SpringBoot启动时会根据指定的顺序来加载主配置文件,并在主配置文件中读取已激活的Profile配置文件。