我们在日常基于SpringBoot或SpringCloud开发过程中会有不同的服务器环境比如:开发环境、测试环境、预发布环境和生产环境等,而不同的环境又要求会有一些不同的配置内容。而Profile提供了一种分离应用配置方法,让配置仅在某些具体的环境中才能被激活生效。
1.默认的Profile
当我们不对项目做任何配置的情况下,SpringBoot会使用默认的Profiledefault,这个可以从一开始的启动日志中看到:
No active profile set, falling back to 1 default profile: "default"
2.激活Profile
使用spring.profiles.active参数指定要激活的Profile,比如在application.yml配置文件中指定激活dev
这里新建的是spring boot的Maven项目,在resources目录下准备三个文件,application.yml、application-dev.yml、application-prod.yml
其中application.yml配置内容如下:
spring: profiles: active: dev
application-dev.yml配置内容如下:
spring: cofig: activate: on-profile: dev myTest: user: name: 张三
application-prod.yml配置内容如下:
spring: cofig: activate: on-profile: prod myTest: user: name: 李四
我这里新建了一个Controller用于测试,这里使用@Value注入了myTest.user.name用于测试不同环境是否可以正常切换。
@RestController public class DemoController { @Value("${myTest.user.name}") private String userName; @RequestMapping("/myTest") public String myTest(){ return userName; } }
当我们设置application.yml里spring.profiles.active为dev时,请求测试接口返回结果如下图:
启动日志中可以看到已经正常切换到dev了
The following 1 profile is active: "dev"
请求测试接口返回结果
这时,我们修改application.yml里spring.profiles.active为prod,重新启动项目,再次请求测试接口。
启动日志中可以看到已经切换到prod了
The following 1 profile is active: "prod"
这时我们请求测试接口看返回结果:
内容也已经成功更新为“李四”了。
3.Profile分组
Profile还提供了分组的功能,有时候会出现多个文件需要一起作为一组进行加载的情况,为了便于区分,这里对之前的文件稍作调整。
新增两个作为一组的配置文件application-dev1.yml和application-dev2.yml
application-dev1.yml配置内容如下:
spring: cofig: activate: on-profile: dev myTest: user: name1: 张三
application-dev2.yml配置内容如下:
spring: cofig: activate: on-profile: dev myTest: user: name2: 王五
修改application.yml文件,新增spring.profiles.group配置,其中dev对应active要开启的组名,dev1和dev2作为dev下的组成员配置文件
spring: profiles: active: dev group: dev: - dev1 - dev2
测试接口也做了调整,输出不同配置中的内容
@RestController public class DemoController { @Value("${myTest.user.name1}") private String userName1; @Value("${myTest.user.name2}") private String userName2; @RequestMapping("/myTest") public String myTest(){ return String.format("dev1中userName1: %s dev2中userName2: %s",userName1,userName2); } }
启动项目后,启动日志中我们会看到
The following 3 profiles are active: "dev", "dev1", "dev2"
请求测试接口
分别取到了dev组下dev1和dev2中的配置内容。