Spring.profiles属性
一般在实际项目中,我们大致会分为dev(开发),test(测试),prod(生产)。每个环境的一些参数配置项是有差异的,比如接口地址、数据库连接配置等。为了避免频繁的修改配置文件,我们想要简便地切换各种环境配置,就需要多个环境的配置项,SpringBoot为我们提供了profiles这个属性,方便我们切换不同的环境以及针对不同的环境进行打包。
首先我们将原来的application.yml拆分,创建不同环境的application.yml,命名规则为application-{profiles}.yml,例如,在src/main/resource目录下创建:
application-dev.yml
application-test.yml
application-prod.yml
将不变的配置项放在application.yml中,将需要根据不同环境改变的配置项分别放在对应的yml文件下。
就可以在application.yml使用以下属性来指定使用哪个环境的配置文件,例如指定开发环境:
spring:
profiles:
active: dev
指定测试环境:
spring:
profiles:
active: test
这样我们就实现了通过手动修改profiles属性来切换不同的配置文件,但是这样在打包的时候,每次还需要手动修改,实际上我们可以使用占位符的方式,将这个参数动态的传入,以实现不同环境的切换,需要按如下所示,配置pom文件。
pom.xml配置
首先添加profiles属性:
<profiles>
<profile>
<!-- 本地开发环境 -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
<spring.active>dev</spring.active>
</properties>
<!-- 默认是dev环境 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 生产环境 -->
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
<spring.active>test</spring.active>
</properties>
</profile>
<profile>
<!-- 生产环境 -->
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
<spring.active>prod</spring.active>
</properties>
</profile>
</profiles>
添加resource:
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>application-${profiles.active}.yml</include>
<include>bootstrap.yml</include>
<include>application.yml</include>
</includes>
</resource>
修改application.yml
这时,我们就可以配置application.yml中的profiles属性:
spring:
profiles:
active: @spring.active@
需要注意的是,不同的SpringBoot版本占位符可能使用的不一样,之前使用的是''$''符号或者"#",新版本的SpringBoot版本使用的是''@"符号。
指定运行环境
经过以上设置,在idea中,我们就可以手动选择需要的配置环境:
或者在打包的时候,传入相关的参数:
mvn clean package -P dev
mvn clean package -P test
mvn clean package -P prod