SpringBoot初識(四)——Maven多環境配置
Maven多環境有什麼好處
在日常專案開發中,我們經常需要在開發環境、測試環境、生產環境等情況下進行專案的部署,對於配置檔案來說,如果無法識別各個環境,就意味著當我們在進行開發時,需要將配置檔案的內容更改為測試環境,而在進行生產部署時,又需要將其內容改為生產內容。這對於一個長期專案來說簡直是災難性的,因為我們需要將更多的精力放在無關係統功能的層面,而Maven多環境配置的出現恰恰幫我們解決了這些。接下來我們通過一個簡單的例子來實現相應功能。
Maven多環境配置
假設我們現在有開發和生產兩個環境(當然在實際開發過程中,可能部署環境會多於這兩個)。那麼我們如何進行切換呢。
緊接上一節內容,我們複製一個chapter_3的資料夾,內容與chapter_2相同。然後在resources資料夾下新建appliaction-dev.yml及appliaction-prod.yml兩個檔案(注意,這兩個檔案應採用application-name.yml的格式,以便後期可以根據多環境查詢到),並將application.yml的內容各複製一份到對應檔案中。
pom檔案中新增如下內容:
<profiles>
<profile>
<id>dev</id>
<properties>
<profileActive>dev</profileActive>
</properties>
<activation>
<!--預設啟用-->
<activeByDefault>true</activeByDefault >
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<profileActive>prod</profileActive>
</properties>
</profile>
</profiles>
<build>
<resources>
<resource >
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>application.yml</include>
<include>application-${profileActive}.yml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
application.yml檔案內容如下:
spring:
profiles:
active: @profileActive@
application-dev.yml檔案內容如下:
server:
port: 8090
#自定義的屬性
my:
name: willem,from dev
application-prod.yml檔案內容如下:
server:
port: 8090
#自定義的屬性
my:
name: willem,from prod
啟動專案並通過postman進行訪問,結果如下
可以看出,此時訪問得到的內容為application-dev.yml中的內容。
若我們將pom.xml檔案中prod的activeByDefault設定為true,再次啟動專案,會得到如下結果
此時得到的內容為application-prod.yml中的內容。通過maven多環境的配置,我們實現了程式的便利性,只需在不同環境是應用不同而選項,就可以輕而易舉的將專案打包為我們想要的樣子。
專案目錄結構如下
專案地址:https://github.com/Willem520/spring-boot-learning.git,原始碼位於chapter_3資料夾下