spring.profiles.active和spring.profiles.includ。。。spring.profiles.active和spring.profiles.include的区别与使⽤
业务场景
优化⽅式
spring.profiles.active属性
启动时指定:
spring.profiles.include属性
配置⽅法:
配置的位置和区别:
⽤⽰例来使⽤和区分
测试⼀:
测试⼆:
测试三:
业务场景
⼀套程序可能会被部署到不同的环境。开发、测试、⽣产环境有不同的配置信息,包括jdbc地址、ip、端⼝等。如果在同⼀个配置⽂件中,每次部署去改配置,会⾮常⿇烦且容易出错。
优化⽅式
spring.profiles.active属性
⼀个好⽅法就是创建不同的配置⽂件,且命名规则遵循application-${profile}.properties,例如:
1. 开发环境配置⽂件:application-dev.properties
2. 测试环境配置⽂件:application-test.properties
3. ⽣产环境配置⽂件:application-prod.properties
当然,我们不能删除项⽬最顶层的application.properties配置,在该⽂件中,根据部署场景不同,切换不同的配置⽂件:配置
spring.profiles.active,属性值为${profile}。
1. spring.profiles.active=dev:启⽤application-dev.properties
2. spring.profiles.active=test:启⽤application-test.properties
3. spring.profiles.active=prod:启⽤application-prod.properties
启动时指定:
在执⾏有参启动时,可以在命令中进⾏指定要选⽤的配置⽂件,例如:
java -jar xx.jar --spring.profiles.active=test
这个命令的优先级是最⾼的,即使application.properties中已经配置spring.profiles.active=dev,最终程序还是会⽤application-
test.properties配置⽂件。
spring.profiles.include属性
再进⼀步,对于开发环境,想⽤不同的配置⽂件存储开发环境不同的配置,例如:
application-dev1.properties中存储jdbc信息
application-dev2.properties中存储ip、端⼝信息
即在启⽤application-dev.properties开发环境(主)配置⽂件时,同时启⽤application-dev1.properties和application-dev2.propertie。
那么,可以使⽤spring.profiles.include属性:同时启⽤其他的profile
配置⽅法:
1. 若是properties⽂件:spring.profiles.include=dev1,dev2
2. 若是yaml⽂件中,
spring.profiles.include:
-dev1
-dev2
或者:spring.profiles.include:dev1,dev2
配置的位置和区别:
1. 配置⽅式⼀:application.properties中,配置spring.profiles.active=dev的同时指定spring.profiles.include=dev1,dev2
2. 配置⽅式⼆:application.properties中,配置spring.profiles.active=dev,application-dev.properties中,配置
spring.profiles.include=dev1,dev2。使⽤application-dev.properties时⾃动就激活了dev1、dev2两个⽂件,不⽤再次指定。(个⼈认为第⼆种⽅法更好)
区别:
1. 第⼀种⽅式启动时,控制台打印The following profiles are active:dev1,dev2,dev
2. 第⼆种⽅式启动时,控制台打印The following profiles are active:dev, dev1,dev2
按照顺序,后⾯的覆盖前⾯的。
⽤⽰例来使⽤和区分
在某个⼯程⾥,我依据开发、⽣产环境,以及它们要同时激活的配置,创建了多个配置,分别如下:
application-dev.properties配置:
my.name=devspring怎么读取yaml
my.height=170
#同时触发dev1和dev2的激活
spring.profiles.include=dev1,dev2
application-dev1.properties配置:
my.name=dev1
my.height=171
application-dev2.properties配置:
my.name=dev2
#my.height=172
application-prod.properties配置:
my.name=prod
my.height=180
application-prod1.properties配置:
my.name=prod1
my.height=181
application-prod2.properties配置:
my.name=prod2
my.height=182
测试⼀:
在application.properties配置⽂件中,指定
#激活的是开发环境配置⽂件
spring.profiles.active=dev
启动时不指定参数
结果:打印的内容为:姓名:dev2,⾝⾼:171
原因:
1. 先加载application.properties
2. 再加载application-dev.properties,
my.name=dev
my.height=170
3. 加载application-dev1.properties,
my.name=dev1
my.height=171
4. 加载application-dev2.properties,
my.name=dev2
my.height=171
测试⼆:
在测试⼀的基础上,启动时指定参数:–spring.profiles.active=prod
优先级最⾼,会使⽤⽣产环境配置⽂件
结果:打印的内容为:姓名:prod,⾝⾼:180
测试三:
在application.properties配置⽂件中,指定
#激活的是⽣产环境配置⽂件
spring.profiles.active=prod
#同时触发prod1和prod2的激活
spring.profiles.include=prod1
启动时不指定参数
结果:
The following profiles are active: prod1,prod2,prod 打印的内容为:姓名:prod,⾝⾼:180

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