首先用 SpringBoot 寫一個 demo,其項目中 src 結構如下。
├─main │ ├─java │ │ └─com │ │ └─company │ │ └─demo │ │ │ DemoApplication.java │ │ │ │ │ └─controller │ │ IndexController.java │ │ │ └─resources │ │ application-dev.properties │ │ application-pro.properties │ │ application.properties │ │ │ ├─static │ └─templates └─test
IndexController.java 中的代碼是:
import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class IndexController { @Value("${environment}") private String environment; @Value("${password}") private String password; @RequestMapping("/") public ResponseEntity<?> index() { return ResponseEntity.ok(environment + " " + password); } }
配置文件 application.properties 內容:
spring.profiles.active=dev
配置文件 application-dev.properties 內容:
environment=develop
password=developPassword
配置文件 application-pro.properties 內容:
environment=produce
因為 application.properties 配置了讀取 profile 是 dev,所以項目啟動時會讀取 application-dev.properties 這個配置文件。
命令行輸入 java -jar demo.jar 啟動項目。
訪問 http://localhost:8080,可得到結果 develop developPassword。
如何讀取外部的配置文件?首先新建一個 application-external.properties 文件,其內容是:
environment=external
password=externalPassword
將文件放在 d:/tmp/ 目錄下。
命令行輸入 java -jar demo.jar --spring.config.location=file:d:/tmp/application-external.properties 啟動項目。
可得到結果 external externalPassword,說明讀取到了外部配置文件。
更優的辦法:
或采用命令 java -jar demo.jar --spring.config.additional-location=file:d:/tmp/application-external.properties 這個可以將外部配置文件追加到項目中,而不是直接替換項目中的配置文件。
需要注意的是 spring.config.additional-location 只是擴展了讀取配置的目錄。
對於 dev pro 配置文件選擇的問題,有如下兩種方式,優先級由高到低:
第一種,命令行啟動時,java -jar -Dspring.profiles.active=pro demo.jar
第二種,在 application.properties 中添加信息 spring.profiles.active=dev
查找配置文件的優先級是:首先在 spring.profiles.active 中設置的文件,例如是 dev,那么優先在 application-dev.properties 中查找。只有當 application-dev.properties 中某些配置項沒有時才會去 application.properties 中查找。