spring.profiles配置文件 详解
- spring.profiles
- spring.profiles.active
- spring.profiles.include
我们正常的开发时,对应不同的环境我们会有不同的配置文件:
- application.yaml 默认的yaml文件
- application-dev.yaml
- application-test.yaml
- application-prod.yaml
常规配置文件如上,一般是按照application-{环境}.yaml的格式命名,如果需要可以继续仿照这样的命名进行添加新的配置文件。
而在我们使用的时候:
- 1.application.yaml中添加 spring.profiles.active={环境}
- 2.可以这样通过在启动命令中添加如下命令
java -Dspring.profiles.active={环境} -jar ***.jar
- 如果1和2同时设定,2会覆盖1.启动2的配置。
为什么在application.yaml中配置会生效,而在另外三个不生效?
这就牵涉到,application.yaml的继承作用,也就是说无论是启动dev,test,prod,都会默认启动application.yaml配置.
如果启动dev环境,相当于启动了application-dev.yaml和application.yaml两个配置文件的并集,相同的属性,则以dev配置文件为主。相当于application-dev.yaml继承了application.yaml。
如果我们既要区分不同的环境,但是又要写在一个配置里面,就会需要这个属性。

如上图,我们在一个配置文件里配置了四个环境,中间是通过“—”分割成四个文档,YAML 文件可以由一或多个文档组成(也即相对独立的组织结构组成),文档间使用“—”(三个横线)在每文档开始作为分隔符。同时,文档也可以使用“…”(三个点号)作为结束符(可选)
这四种环境就是靠spring.profiles配置的。
没有配置 相当于 application.yaml 第一块 spring.profiles: dev 相当于 application-dev.yaml 第二块 spring.profiles: test 相当于 application-test.yaml 第三块 spring.profiles: prod 相当于 application-prod.yaml 第四块
而且 spring.profiles可以设定多个名称,中间通过逗号分割,如:
spring.profiles: dev,dev1
那么在使用时
spring.profiles.active: dev 和 spring.profiles.active: dev1
都相当于这同一个配置,dev和dev1只是不同的别名罢了。
spring.profiles.active
这个没什么好讲的,大家经常用,唯一要讲的是,可以同时使用多个配置文件,也是通过逗号分割,如:
spring.profiles.active: dev,test
dev和test两个配置里面,相同的属性的,谁写在后面谁优先级高。
比如,dev里面name: zhangsan test里面 name:lisi,那么name:lisi 生效。
不同的取并集。
spring.profiles.include
首先 spring.profiles.include有spring.profiles.active一样的作用。可以使用对应的配置,其实spring.profiles.include的单纯作用就是将多个配置整合起来,
比如我有多个配置文件每个负责一部分配置,配置文件如下:
- application-prod_redis.yaml
- application-prod_mq.yaml
- application-prod_db.yaml
我现在只需要在application-prod.yaml文件中配置如下内容:
spring.profiles.include: prod_redis,prod_mq,prod_db
这样只需要使用prod就同时拥有了redis和mq,db的配置了