springboot中spring.profiles.include的妙⽤
  我们有这样的⼀个springboot项⽬。项⽬分为开发、测试、⽣产三个不同阶段(环境),每个阶段都会有db、ftp、redis等的不同配置信息。我们可以使⽤spring.profiles.include来实现三种不同环境的⼀键切换。
项⽬总(⼊⼝)配置⽂件:
spring.profiles.active:  dev  #dev、test、prod 三种配置可以在这⾥进⾏⼀键切换,默认激活 dev(开发)环境配置
项⽬开发环境配置⽂件:
spring.profiles.include: devDb,devFtp,devRedis
项⽬测试环境配置⽂件:
spring.profiles.include: testDb,testFtp,testRedis
项⽬⽣产环境配置⽂件:
spring.profiles.include: prodDb,prodFtp,prodRedis
spring.profiles.include 的作⽤是可以叠加激活新的profile ,这样可以在总的项⽬配置(l)中实现⼀键切换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的区别
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=Jim
application-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怎么读取properties此情况,已命令指定的配置⽂件中的值为准,其他⽂件中再配置spring.profiles.active也不会⽣效,如果不存在值,那么会以pring.profiles.include指定的最后⼀个⽂件中的值为准
简要说
启动命令spring.profiles.active指定⽂件中的值 > ⽂件中spring.profiles.active指定的⽂件列表中最后⼀次出现的值 > ⽂件中spring.profiles.include指定的⽂件列表中最后⼀次出现的值(注意:⽆论是否配置启动命令参数指定⽂件,最后都会加载application.properties,它⾥边配置的信息也很关键)
参考⽂章:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。