對於環境的不同,需要配置的參數信息也是不同,所以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>
這里的
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腳本,打包時直接調用即可。