天天看點

spring boot中配置檔案的加載位置以及優先級

配置檔案加載位置

springboot 啟動會掃描以下位置的application.properties或者application.yml檔案作為Spring boot的預設配置檔案。

–file:./config/

–file:./

–classpath:/config/

–classpath:/
           

優先級由高到底,高優先級的配置會覆寫低優先級的配置;

SpringBoot會從這四個位置全部加載主配置檔案;互補配置;

下面我們進行測試看看是不是上面所說:

  1. resource

    目錄下建立

    application.properties

    ,在配置檔案中配置端口号

    server.port=8081

    8081端口啟動 (對應classpath:/)
  2. resource

    目錄下建立config目錄,在config目錄中建立

    application.properties

    ,在配置檔案中配置端口号

    server.port=8082

    8082端口啟動 (對應classpath:/config/)
  3. 我們直接在建立項目的目錄下建立一個

    application.properties

    ,在配置檔案中配置端口号

    server.port=8083

    8083端口啟動 (對應file:./)
  4. 我們在項目目錄下建立一個config目錄,在config目錄中建立

    application.properties

    ,在配置檔案中配置端口号

    server.port=8084

    8084端口啟動 (對應file:./)

這裡測試的是優先級問題,那什麼叫互補呢,其實也好了解,spring boot 會按照優先級來掃描配置檔案,如果低優先級配置了端口和通路路徑,而高優先級的配置檔案隻配置端口那麼我們隻會覆寫端口,而通路路徑是有效的,下面我們通過一個例子來說明。

  1. resource

    目錄下建立

    application.properties

    (classpath:/路徑)
# 配置端口号
server.port=8081

#配置通路路徑
#server.context-path=/spring
server.servlet.context-path=/spring
           
  1. resource

    目錄下建立config目錄,在config目錄中建立

    application.properties

    (classpath:/config/)
# 配置端口号
server.port=8082
           

我們建立一個controller看看如何通路

@RestController
public class HelloController {

    @RequestMapping(method = RequestMethod.GET,path = "/hello")
    public String hello(){
        return "hello";
    }
 }
           

啟動項目後我們看看這一句日志

Tomcat started on port(s): 8082 (http) with context path '/spring'

端口被覆寫,但是通路路徑要加/spring。這就是互補的意思。

我們還可以通過spring.config.location來改變預設的配置檔案位置

項目打包好以後,我們可以使用指令行參數的形式,啟動項目的時候來指定配置檔案的新位置;指定配置檔案和預設加載的這些配置檔案共同起作用形成互補配置;

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=D:/application.properties

我們要把配置檔案放在D盤中。

繼續閱讀