在工作中,對於開發環境、測試環境、生產環境的設定肯定都不相同,比如我們開發階段會在自己的電腦上安裝 mysql
,連線自己電腦上的 mysql
即可,但是專案開發完畢後要上線就需要該設定,將環境的設定改為線上環境的。
來回的修改設定會很麻煩,而 SpringBoot
給開發者提供了多環境的快捷設定,需要切換環境時只需要改一個設定即可。不同型別的組態檔多環境開發的設定都不相同,接下來對不同型別的組態檔進行說明
在 application.yml
中使用 ---
來分割不同的設定,內容如下
#開發
spring:
profiles: dev #給開發環境起的名字
server:
port: 80
---
#生產
spring:
profiles: pro #給生產環境起的名字
server:
port: 81
---
#測試
spring:
profiles: test #給測試環境起的名字
server:
port: 82
---
上面設定中 spring.profiles
是用來給不同的設定起名字的。而如何告知 SpringBoot
使用哪段設定呢?可以使用如下設定來啟用都一段設定
#設定啟用的環境
spring:
profiles:
active: dev #表示使用的是開發環境的設定
綜上所述,application.yml
組態檔內容如下
#設定啟用的環境
spring:
profiles:
active: dev
---
#開發
spring:
profiles: dev
server:
port: 80
---
#生產
spring:
profiles: pro
server:
port: 81
---
#測試
spring:
profiles: test
server:
port: 82
---
注意:在上面設定中給不同設定起名字的 spring.profiles
設定項已經過時。最新用來起名字的設定項是
#開發
spring:
config:
activate:
on-profile: dev
properties
型別的組態檔設定多環境需要定義不同的組態檔
application-dev.properties
檔案是開發環境的組態檔。我們在該檔案中設定埠號為 80
server.port=80
application-test.properties
檔案是測試環境的組態檔。我們在該檔案中設定埠號為 81
server.port=81
application-pro.properties
檔案是生產環境的組態檔。我們在該檔案中設定埠號為 82
server.port=82
SpringBoot
只會預設載入名為 application.properties
的組態檔,所以需要在 application.properties
組態檔中設定啟用哪個組態檔,設定如下:
spring.profiles.active=pro
使用 SpringBoot
開發的程式以後都是打成 jar
包,通過 java -jar xxx.jar
的方式啟動服務的。那麼就存在一個問題,如何切換環境呢?因為組態檔打到的jar包中了。
我們知道 jar
包其實就是一個壓縮包,可以解壓縮,然後修改設定,最後再打成jar包就可以了。這種方式顯然有點麻煩,而 SpringBoot
提供了在執行 jar
時設定開啟指定的環境的方式,如下
java –jar xxx.jar –-spring.profiles.active=test
那麼這種方式能不能臨時修改埠號呢?也是可以的,可以通過如下方式
java –jar xxx.jar –-server.port=88
當然也可以同時設定多個設定,比如即指定啟用哪個環境設定,又臨時指定埠,如下
java –jar springboot.jar –-server.port=88 –-spring.profiles.active=test
大家進行測試後就會發現命令列設定的埠號優先順序高(也就是使用的是命令列設定的埠號),設定的優先順序其實 SpringBoot
官網已經進行了說明,參見 :
https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
進入上面網站後會看到如下頁面
如果使用了多種方式配合同一個設定項,優先順序高的生效。
有這樣的場景,我們開發完畢後需要測試人員進行測試,由於測試環境和開發環境的很多設定都不相同,所以測試人員在執行我們的工程時需要臨時修改很多設定,如下
java –jar springboot.jar –-spring.profiles.active=test --server.port=85 --server.servlet.context-path=/heima --server.tomcat.connection-timeout=-1 …… …… …… …… ……
針對這種情況,SpringBoot
定義了組態檔不同的放置的位置;而放在不同位置的優先順序時不同的。
SpringBoot
中4級組態檔放置位置:
1級:resources/application.yml
2級:resources/config/application.yml
3級:target/application.yml
4級:target/config/application.yml
說明:級別越高優先順序越高
3級與4級留作系統打包後設定通用屬性
1級與2級用於系統開發階段設定通用屬性
建立一個名為 springboot_06_config_file
的 SpringBoot
工程,,參考Java開發學習(三十五)----SpringBoot快速入門及起步依賴解析,目錄結構如下
在 resources
下建立一個名為 config
的目錄,在該目錄中建立 application.yml
組態檔,而在該組態檔中將埠號設定為 81
,內容如下
server:
port: 81
而在 resources
下建立的 application.yml
組態檔中並將埠號設定為 80
,內容如下
server:
port: 80
執行啟動引導類,可以在控制檯看到如下紀錄檔資訊
通過這個結果可以得出類路徑下的 config
下的組態檔優先於類路徑下的組態檔。
要驗證4級,按照以下步驟完成
將工程打成 jar
包
點選工程的 package
來打 jar
包
在硬碟上找到 jar
包所在位置
在 jar
包所在位置建立 config
資料夾,在該資料夾下建立 application.yml
組態檔,而在該配合檔案中將埠號設定為 82
在命令列使用以下命令執行程式
java -jar springboot_06_config_file-0.0.1-SNAPSHOT.jar
執行後紀錄檔資訊如下
通過這個結果可以得出file: config
下的組態檔優先於類路徑下的組態檔。
注意:
SpringBoot 2.5.0版本存在一個bug,我們在使用這個版本時,需要在
jar
所在位置的config
目錄下建立一個任意名稱的資料夾
本文來自部落格園,作者:|舊市拾荒|,轉載請註明原文連結:https://www.cnblogs.com/xiaoyh/p/16468149.html