springboot中spring.profiles.include的妙用
我们有这样的一个springboot项目。项目分为开发、测试、生产三个不同阶段(环境),每个阶段都会有db、ftp、redis等的不同配置信息。我们可以使用spring.profiles.include来实现三种不同环境的一键切换。
项目总(入口)配置文件:
bootstrap.yml ,内容如下
spring.profiles.active: dev #dev、test、prod 三种配置可以在这里进行一键切换,默认激活 dev(开发)环境配置
项目开发环境配置文件:
application-dev.yml (开发环境入口配置)、application-devDb.yml 、application-devFtp.yml、application-devRedis.yml
application-dev.yml 中含有如下内容
spring.profiles.include: devDb,devFtp,devRedis
项目测试环境配置文件:
application-test.yml (测试环境入口配置)、application-testDb.yml 、application-testFtp.yml、application-testRedis.yml
application-test.yml 中含有如下内容
spring.profiles.include: testDb,testFtp,testRedis
项目生产环境配置文件:
application-prod.yml (生产环境入口配置)、application-prodDb.yml 、application-prodFtp.yml、application-prodRedis.yml
application-prod.yml 中含有如下内容
spring.profiles.include: prodDb,prodFtp,prodRedis
spring.profiles.include 的作用是可以叠加激活新的profile ,这样可以在总的项目配置(bootstrap.yml)中实现一键切换dev、test、prod三者不同环境, 即
切换为dev时,同时激活了dev、devDb、devFtp、devRedis 的profile
切换为test时,同时激活了test、testDb、testFtp、testRedis 的profile
切换为prod时,同时激活了prod、prodDb、prodFtp、prodRedis 的profile
另外: 在yml配置文件中配置List<String> 的值,可以采用 -子项 的方式,如 :
spring.profiles.include:
- 子项1
- 子项2
- 子项3
也可以采用 逗号分隔元素列表的方式,如:
spring.profiles.include: 子项1,子项2,子项3
通过一个测试了解:spring.profiles.active和spring.profiles.include的区别
源引自:https://blog.csdn.net/happyblueice/article/details/86538843
application.properties文件内容
spring.profiles.active=test4 pring.profiles.include=test3,test5 version=1 name=Tom
application-test2.properties文件内容
pring.profiles.include=test3,test4 version=2
application-test3.properties文件内容
version=3 name=Allen
application-test4.properties文件内容
name=Jimapplication-test5.properties
version=5 name=Ifty
无参启动例如 java -jar example.jar 先加载application.properties文件 最终version=5,name=Jim 有参启动例如 java -jar example.jar --spring.profiles.active=test2 先加载application-test2.properties文件,再加载application.properties文件 最终version=2,name=Ifty 总结: 多个配置文件中有同一个值,以下情况获取值的效果: 1.启动命令不带--spring.profiles.active参数以application.properties首先启动 按顺序所有文件第一个配置的spring.profiles.active属性中指定的最后一个文件中含有该属性的值为准 如果所有文件都没有spring.profiles.active,那么以pring.profiles.include配置的最后一个属性文件中的值为准 2.启动命令带--spring.profiles.active参数以参数指定的属性文件首先启动 此情况,已命令指定的配置文件中的值为准,其他文件中再配置spring.profiles.active也不会生效,如果不存在值,那么会以pring.profiles.include指定的最后一个文件中的值为准 简要说 启动命令spring.profiles.active指定文件中的值 > 文件中spring.profiles.active指定的文件列表中最后一次出现的值 > 文件中spring.profiles.include指定的文件列表中最后一次出现的值 (注意:无论是否配置启动命令参数指定文件,最后都会加载application.properties,它里边配置的信息也很关键)
参考文章:
https://blog.csdn.net/jasnet_u/article/details/82995845
https://blog.csdn.net/happyblueice/article/details/86538843