5.預設配置檔案
通常情況下,Spring Boot 在啟動時會將 resources 目錄下的 application.properties 或 apllication.yml 作為其預設配置檔案,我們可以在該配置檔案中對專案進行配置,但這並不意味著 Spring Boot 專案中只能存在一個 application.properties 或 application.yml。
一、預設配置檔案
Spring Boot 專案中可以存在多個 application.properties 或 apllication.yml。
Spring Boot 啟動時會掃描以下 5 個位置的 application.properties 或 apllication.yml 檔案,並將它們作為 Spring boot 的預設配置檔案。
file:./config/
file:./config/*/
file:./
classpath:/config/
classpath:/
注:file: 指當前專案根目錄;classpath: 指當前專案的類路徑,即 resources 目錄。
以上所有位置的配置檔案都會被載入,且它們優先順序依次降低,序號越小優先順序越高。其次,位於相同位置的 application.properties 的優先順序高於 application.yml。
所有位置的檔案都會被載入,高優先順序配置會覆蓋低優先順序配置,形成互補配置,即:
- 存在相同的配置內容時,高優先順序的內容會覆蓋低優先順序的內容;
- 存在不同的配置內容時,高優先順序和低優先順序的配置內容取並集。
二、示例
建立一個名為 springbootdemo 的 Spring Boot 專案,並在當前專案根目錄下、類路徑下的 config 目錄下、以及類路徑下分別建立一個配置檔案 application.yml,該專案結構如下圖。
圖1:Spring Boot 專案配置檔案位置
專案根路徑下配置檔案 application.yml 配置如下。
#專案更目錄下
#上下文路徑為 /abc
server:
servlet:
context-path: /abc
專案類路徑下 config 目錄下配置檔案 application.yml 配置如下。
#類路徑下的 config 目錄下 #埠號為8084 #上下文路徑為 /helloWorld server: port: 8084 servlet: context-path: /helloworld
專案類路徑下的 application.yml 配置如下。
#預設配置
server:
port: 8080
在 net.biancheng.www.controller 包下建立一個名為 MyController 的類,程式碼如下。
package net.biancheng.www.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@ResponseBody
@RequestMapping("/test")
public String hello() {
return "hello Spring Boot!";
}
}
啟動 Spring Boot,檢視控制檯輸出,如下圖。
圖2:Spring Boot 專案啟動控制檯輸出
根據 Spring Boot 預設配置檔案優先順序進行分析:
- 該專案中存在多個預設配置檔案,其中根目錄下/config 目錄下的配置檔案優先順序最高,因此專案的上下文路徑為 “/abc”;
- 類路徑(classpath)下 config 目錄下的配置檔案優先順序高於類路徑下的配置檔案,因此該專案的埠號為 “8084”;
- 以上所有配置項形成互補,所以訪問路徑為“http://localhost:8084/abc”。
根據伺服器埠和上下文路徑,使用瀏覽器訪問http://localhost:8084/abc/test,結果如下圖。