对于环境的不同,需要配置的参数信息也是不同,所以SpringBoot提供了spring.profiles.avtive
参数进行配置,但是通过手动修改参数的方式难免有些不方面,并且这个参数在每个环境都是不一样的,并不能直接写死,提交代码的时候还容易遗忘是否改过了,为此SpringBoot提供了一种通过@占位符+Maven配置的方式来方便的切换工作环境。
首先spring.profiles.avtive
是需要可以动态切换的,所以这里先使用一个@占位符来表示环境变量,如下
spring:
profiles:
active: @profileActive@
然后在pom.xml通过profiles定义需要的工作环境设置,我的配置如下
<profiles>
<profile>
<id>dev</id>
<properties>
<profileActive>dev</profileActive>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profileActive>test</profileActive>
</properties>
</profile>
<profile>
<id>local</id>
<properties>
<profileActive>local</profileActive>
</properties>
</profile>
</profiles>
这里的true设置为默认环境,使用打包命令无需指定环境的profileActive
。
然后根据application-xx.yml的命名规则准备对应数量的配置文件,如
- application-test.yml
- application-dev.yml
- application-local.yml
这里每个profile里的profileActive
都和application.yml
中的profileActive
对应,这时候刷新Maven配置,在idea的Maven插件上会出环境选项,点击箭头所指的刷新按钮即可更新Maven项目配置,但是要注意的是,每次切换之前记得通过 mvn clean
清除编译的target,不然会提示关于profileActive
之类的错误。
以及,需要在idea的spring插件的Active profiles
设置 profiles
选项
开发时问题解决,那打包的时候我们也需要根据不同的环境打包,可以通过Maven进行环境打包
mvn clean package -P test //打包test环境
mvn clean package //不指定环境变量则使用默认profileActive,通过<activeByDefault>指定
这里就表示打包test环境的jar包,打包后解压jar看application.yml的profileActive
就变成了test
多余的配置文件我们是不需要的,一个环境只需要一个application-xx.yml,那么可以通过Maven配置resource的includes来排除其他的多余的配置文件,我的配置如下
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>application-${profileActive}.yml</include>
<include>application.yml</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
这里的<include>application-${profileActive}.yml</include>
配置即可只导入对应环境名称的配置文件,其他环境的配置文件则会排除在外。
另外为了打包方便,也可以将mvn clean package -P xx
命令编写成一个bat或sh脚本,打包时直接调用即可。