SpringBoot系列之配置文件加載位置
SpringBoot啟動會自動掃描如下位置的application.properties或者application.yml文件作為Springboot的默認配置文件
- project:/config/(項目根目錄下面config文件夾里的配置文件)
- project:/(項目根目錄下面的配置文件)
- classpath:/config/(Resources文件夾下面config文件夾里的配置文件)
- classpath:/(Resources文件夾下面的配置文件))
如圖所示,在resources文件夾下面建個config文件夾,往里面丟個application.properties配置文件,再往resources根目錄下面也丟個application.properties文件

先往resources根目錄下面的application.properties配置文件寫幾個參數:
# 配置端口為8070
server.port=8070
# 配置contextPath
server.servlet.context-path= /example
再往config文件夾下面的application.properties配置文件添加加個參數:
# 匹配端口為8081
server.port=8081
啟動一下項目,在Springboot項目的控制台可以看到打印輸出

當然你想寫個控制類測試一下也是可以的
package com.example.springboot.properties.conroller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping(value = {"/hello","/sayHello"})
public String sayHello(){
return "hello world!";
}
}
ok,啟動項目,經過驗證訪問 http://localhost:8081/example/hello 才是可以訪問的,8080端口不可以訪問,而context-path: /example是配在resources根目錄下面的,這個屬性配置沒被覆蓋,其端口配置就被覆蓋了,所以我們可以得出,Springboot項目啟動時是會先讀取config文件夾里的配置文件,因為只配了一個端口的,所以就只讀端口的,接着,低優先級的application.properties沒被覆蓋的配置屬性還是會被讀取的,所以我們也可以說配置文件的讀取存在互補配置的特性
ok,繼續驗證,如圖所示:

按照同樣的方式,驗證放在4個位置的application.properties讀取優先級,通過實踐驗證,可以得出:
Springboot項目啟動時會按照如下順序由高到低讀取配置,高優先級的屬性會覆蓋低優先級的屬性,屬性文件之間存在互補配置的特性
- project:/config/(項目根目錄下面config文件夾里的配置文件)
- project:/(項目根目錄下面的配置文件)
- classpath:/config/(Resources文件夾下面config文件夾里的配置文件)
- classpath:/(Resources文件夾下面的配置文件))
ok,這里介紹了Springboot項目啟動時屬性文件的讀取順序,當然我們也是可以通過spring.config.location來指定默認配置文件的位置
可以將參數加在啟動時候的虛擬機參數里:
代碼 -Dspring.config.location=D:/application.properties

項目啟動參數里加也是可以的

丟在application.properties配置文件里?

很顯然是不起效的,因為一個配置文件,肯定不能指定其它配置文件

java -jar命令也是可以的,首先要maven package

java -jar springboot-properties-config-0.0.1-SNAPSHOT.jar --spring.config.location=D:/application.properties
idea有些版本是有teminal命令台,可以直接在里面敲命令,沒有的話就只能通過cmd直接敲命令的
