SpringBoot系列之配置文件加載位置


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直接敲命令的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM