Spring Framework是Java中的好框架,出了Spring Boot之後又讓方便度更上一層樓,只需要簡單的一點設定就可以開始使用。但同一個專案在不同環境有不同的需求,需要有不同的變數與設定值。因此可以建立多個application.properties設定檔(或是application.yml),常見的會有開發版本(dev)、測試版本(test)、生產版本(prod)等,在此介紹指定環境的幾種方式。

例如我們有以下的application.properties檔案,指定的資料庫的連結網址與帳號密碼。

spring.datasource.url = jdbc:mysql://...?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
spring.datasource.username = root
spring.datasource.password = root

或者也可以使用application.yml檔案來指定。

spring.datasource:
  url: "jdbc:mysql://...?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8"
  username: "root"
  password: "root"

顯然生產環境與測試環境的資料庫帳號密碼通常不會是如此簡單的設置,而且資料庫連結也可能不同,因此我們可以建立好幾個設定檔案,檔案名稱與功能如下。

功能Properties檔案名稱YAML檔案名稱
通用版application.propertiesapplication.yml
開發版application-dev.propertiesapplication-dev.yml
測試版application-test.propertiesapplication-test.yml
生產版application-prod.propertiesapplication-prod.yml
設定檔案的名稱與功能

有一點直得注意的是,只有通用版的設定檔案需要完整的內容,其他版本只需要填寫不同的地方即可。例如每個版本的server.port都是80,那麼只需要寫在通用版的設定檔案裡面。設定重複的時候,其他環境的設定會覆蓋通用版的內容。

通常正式運作的環境會簡稱為prod,因此希望運作的是application-prod.properties時,可以透過環境變數設定,以Linux為例在啟動腳本加上以下內容。

export SPRING_PROFILES_ACTIVE=prod

如果已經將Spring bppt專案打包成包含Tomcat的可執行Jar檔,可以在用以下方式啟動來指定prod。

java -jar (JAR檔案名稱) --spring.profiles.active=prod

也可以直接準備一個Properties或是YAML檔案,在啟動JAR的時候讓Spring讀取額外的設定檔。需要注意的是,使用這種指定方式必須在設定檔案寫「完整的」設定內容,Spring不會對找不到的值去通用設定檔尋找。

java -jar (JAR檔案名稱) --spring.config.location=(設定檔名稱)

如果是Windows也可以在設定環境變數的視窗加上SPRING_PROFILES_ACTIVE來指定。