科技新知

為何要有不同的建構 Profile

Profile這一字,很難在IT技術文章中翻譯,它在Spring boot中的語意大概就是一個設定一個固定的運行環境參數合。例如我們做開發時,有些只想在開發環境中出現的設定,諸如測試用的資料庫、細緻一點的LOG層級,都寫在dev profile中。當換成正式環境時,我們也有一套全新的配置,而且會集中寫在prod profile中。把這些參數設定從程式碼邏輯中抽離,可以讓你的程式碼簡潔很多,也方便對比不同環境的設定。

application.properties

Spring Boot (Spring Boot Starter) 就提供了 Profile 管理。我們可以為一個Spring Boot 模組設定多個不同的 application.properties

  • src/main/resources/application.properties 為預設 (default profile)
  • src/main/resources/application-uat.properties 為驗收環境專用
  • src/main/resources/application-prod.properties 為投產環境專用
  • src/main/resources/application-test.properties 為自動測試專用

在執行程式時,我們只要動改變啟動的參數spring.profiles.active,例如

mvn spring-boot:run -Dspring-boot.run.arguments="--spring.profiles.active=uat"
# or
mvn package && java -jar target/YOUR_JAR_NAME --spring.profiles.active=uat
 

Spring Boot 就會指定載入 application-uat.properties 的內容,如果有些值沒有定義,它會再追溯到預設的 application.properties中。

在運行中改變啟動參數的情況可能不多,筆者更常用的情況是在編譯期間產生多個 Jar 檔,不同 Jar 檔指定不同的環境,方便系統管理員取用測試。想做到這個效果,我們需要在 application.properties 中,我們還需要加入一句spring.profiles.active=@active.profile@,並在編譯工具中加入這個變量,例如筆者常用的 maven pom.xml 中,就會有這一串設定

它在 maven clean compile package 時,就已經可以在JAR中填入固定spring.profiles.active。那麼每次執行時,都會是指定的profile。

mvn package -Puat
java -jar target/YOUR_JAR_NAME

在這個例子中,JAR 中的 spring.profiles.active 就會固定是uat,我們不需要在啟動參數中加入字眼。

如果大家不會碰到混合Profile的話,其實上述的資訊已經足夠大家應付很多情境。

但當大家有追求,需要寫自動測試,有機會不同自動測試需要啟用不同的 Profile ,更有可能出現混合Profile的情況,這件事就變得很複雜。我們需要繼續深入了解一下 Spring Boot 的覆蓋機制,下面將會以測試方式導出結論。

如果真的對混合 Profile 沒有太多信心,我們也可以用單一 Profile 重組不同 properties 的方式,自行去模擬混合 Profile ,例如除了dev, uat, test之外,我們可以加入 dev-test, uat-test, default-test 作為驅分。這樣應該可以簡化測試的複雜度,不過 properties 檔案就可能會成幾何級成長。

但在某情特殊情況下,我們不可能簡單地重組 properties 等型式去做測試,例如針對部份uat-test的測試,只有部份可以執行,部份不可以,那麼我們還是需要用到混合 Profile ,限定某些測試需要執個某個 profile ,但其餘部份可以動態切換。

有條件的讀者,也可以先行試玩一下混合 profile 的特性,下期筆者再為不同情況作解紹。

混合Profile Source code

spring boot profile

馬交野


破.地獄
愛情咀咀咒
摘星廚神:巴黎夢
穿越時空的初吻
你的顏色
摘星廚神.巴黎夢
穿越時空の初吻
贖夢
4DX  Imagine Dragons: Live From The Hollywood Bowl with the LA Film Orchestra 2025
SEVENTEEN RIGHT HERE WORLD TOUR IN CINEMAS
迪士尼《白雪公主》
IMAX with Laser 白雪公主
4DX  白雪公主
白雪公主
魔域女巫
高空殺機
4DX  ZEROBASEONE THE FIRST TOUR TIMELESS WORLD IN CINEMAS
孤星淚
Imagine Dragons: Live From The Hollywood Bowl with the LA Film Orchestra 2025
孤獨的美食家
無痛俠
猴
機動戰士Gundam GQuuuuuuX -Beginning-
ZEROBASEONE THE FIRST TOUR TIMELESS WORLD IN CINEMAS
門逃
米奇17號
4DX  劇場版 「進擊的巨人」完結篇 THE LAST ATTACK
4DX  哪吒之魔童鬧海
IMAX with Laser 哪吒之魔童鬧海
看我今天怎麼說
哪吒之魔童鬧海
美國隊長4:勇敢新世界
破.地獄
愛情咀咀咒