在開發過程當中每每會有多種環境,如開發環境、測試環境、生產環境等等。若是將配置文件寫在一個文件裏,在不一樣環境時手動切換,這無疑是繁瑣的,也是不智能的spring
3個核心點:app
${xxx}
形式書寫爲便於演示,這裏只在 src/main/resources
目錄下建立一個名爲 application.properties
的配置文件,具體以下:maven
application.name=${application.name}
複製代碼
在 src/main
目錄下建立一個 properties
文件夾,並在 properties
文件夾下分別建立 application-dev.properties
,application-prod.properties
,具體以下:測試
application.name=application-dev
複製代碼
application.name=application-prod
複製代碼
<build>
<filters>
<!-- 這裏的文件名必須與多環境配置文件的文件名相同, ${env} 會動態獲取不一樣環境 -->
<!-- 假如激活 dev 環境, 這時對應的文件就是 src/main/properties/application-dev.properties -->
<filter>src/main/properties/application-${env}.properties</filter>
</filters>
<resources>
<resource>
<!-- 能夠理解爲真正的配置文件所在的目錄 -->
<directory>src/main/resources</directory>
<!-- 是否替換資源中的屬性, 設置爲 true 才能實現動態替換 -->
<filtering>true</filtering>
</resource>
</resources>
</build>
<profiles>
<!-- 環境一 -->
<profile>
<!-- 使用 mvn package 打包時, -P 指定 profile 的輸入值就是此 id -->
<!-- id 能夠隨便命名, 不能重複, 能夠與 env 相同, 這裏演示特地與 env 不一樣 -->
<id>develop</id>
<properties>
<!-- env 必須與文件的後綴一致(application-${env}.properties) -->
<!-- 其中 env 這個標籤也能夠自定義, 沒有強制要求必須是 env, 但必須與上面 application-${env}.properties 的 ${} 裏的值一致 -->
<env>dev</env>
</properties>
<!-- 不指定環境則默認 dev 環境, 能夠放在任一個環境下, 但不能在多個環境中指定 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 環境二 -->
<profile>
<id>product</id>
<properties>
<env>prod</env>
</properties>
</profile>
</profiles>
複製代碼
直接執行 mvn clean package -Dmaven.test.skip=true
,此時打包後的 application.properties
內容以下:ui
application.name=application-dev
複製代碼
注意這裏並無指定 profile
,但咱們設置了默認環境爲 dev
,因此 application-dev.properties
的值就打進了 application.properties
裏spa
執行 mvn clean package -Pproduct -Dmaven.test.skip=true
,此時打包後的 application.properties
內容以下:code
application.name=application-prod
複製代碼
注意 -P
指定的 profile
是 pom.xml
裏配置的 profile id
,而不是標籤 env
對應的值server
若是將 build:resources:resource:filtering
標籤註釋掉,或者設置爲 false
,此時打包後的 application.properties
內容以下:xml
application.name=${application.name}
複製代碼
因此若是要經過 profile
動態加載配置文件,build:resources:resource:filtering
標籤必定要設置爲 true
ip
相比與普通 Maven 工程,Spring Boot 多環境配置更快捷
在 src/main/resources
目錄下建立 application.properties
或 application.yml
,這裏建立 application.yml
,內容以下:
spring:
profiles:
active: @profileActive@
複製代碼
在 src/main/resources
目錄下建立 application-dev.yml
,內容以下:
server:
port: 8088
複製代碼
在 src/main/resources
目錄下建立 application-prod.yml
,內容以下:
server:
port: 8099
複製代碼
<profiles>
<profile>
<!-- profile id, 打包時指定使用 -->
<id>dev</id>
<properties>
<profileActive>dev</profileActive>
</properties>
<!-- 默認激活 dev 環境 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<profileActive>prod</profileActive>
</properties>
</profile>
</profiles>
複製代碼
能夠發現 Spring Boot 的 pom 文件不須要配置 build
標籤就能夠工做,比普通 Maven 工程更友好