profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境,使用不同的配置。
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本;
例如:
application-test.properties 代表测试环境
application-dev.properties 代表开发环境
application-pro.properties 代表生产环境
但是Springboot不会去加载这些配置文件,默认是加载application.properties文件。如果将application.properties文件注释掉, Sprinboot仍然会读取其他的application-环境名.properties中的配置,且properties文件的优先级高于yml文件。
因此,我们需要一个配置来激活不同的环境
properties版本:
#激活开发环境
spring.profiles.active=dev
yaml版本:
server:
port: 8081
#选择要激活那个环境块
spring:
profiles:
active: pro
---
server:
port: 8083
spring:
profiles: dev #配置环境的名称
---
server:
port: 8084
spring:
profiles: pro #配置环境的名称
yml的配置方式比properties要方便一些。
多个环境下,properties需要写多个配置文件,而yml可以在一个配置文件中写多种环境
注意:如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配置文件的!
加载配置文件的位置
Springboot的官方文档有提供四种位置
https://docs.spring.io/spring-boot/docs/2.2.13.RELEASE/reference/html/spring-boot-features.html#boot-features-external-config
1、file:./config/ ——项目路径下的config文件夹配置文件
2、file:./ ——项目路径下配置文件
3、classpath:/config/ ——resource下的config文件夹配置文件
4、classpath:/ ——resource下配置文件
springboot默认加载的顺序如下:
优先级1:项目路径下的config文件夹配置文件
优先级2:项目路径下配置文件
优先级3:resource下的config文件夹配置文件
优先级4:resource下配置文件
很迷,Springboot默认生成的是优先级最低的配置文件。高优先级的配置会覆盖低优先级的。
当然,我们也有办法改变默认的配置文件位置。
当我们使用spring.config.location
自定义配置文件位置时,我们的配置将替换默认位置。例如,如果spring.config.location配置为classpath:/custom-config/,file:./custom-config/,则搜索顺序如下:
file:./custom-config/
classpath:custom-config/
或者,当使用spring.config.additional-location
来配置(添加)位置时,除默认位置外,还会使用我们配置的位置且在默认位置之前搜索它们。例如,如果配置了classpath:/custom-config/,file:./custom-config/,则搜索顺序如下:
file:./custom-config/
classpath:custom-config/
file:./config/
file:./
classpath:/config/
classpath:/
除此之外,项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;这种情况,一般是后期运维做的多,相同配置,外部指定的配置文件优先级最高
java -jar spring-boot-config.jar --spring.config.location=xxx/application.properties