springboot配置文件加載順序


引言

了解SpringBoot配置文件的加載順序,對項目的開發和部署會有很大的幫助,不同環境加載不同的配置文件,不必再修改配置文件。

springboot配置文件加載順序

1、項目內配置文件加載順序

SpringBoot項目啟動會掃描以下位置的application.properties或者application.yml文件作為SpringBoot的默認配置文件,具體的目錄位置見下圖。

  1. file:./config/ ( 項目根路徑下的config文件夾)
  2. file:./  (項目根路徑)
  3. classpath:/config/ (類路徑下的config文件夾)
  4. classpath:/ (類路徑)

啟動項目可看到使用的8080端口,最優先使用的配置文件./config/ ( 項目根路徑下的config文件夾)

 把8080的配置文件注釋掉,再啟動項目

 可看到使用的8083端口,使用的file:./  (項目根路徑)的配置文件

再把該配置文件注釋掉,再啟動項目

 這次使用的是8081端口,使用的是classpath:/config/ (類路徑下的config文件夾)的配置文件

再將該配置文件注釋掉,再次啟動項目

 可以看到這次使用的是classpath:/ (類路徑)下配置文件

上面四個位置的配置文件位置,優先級由高到底,高優先級的配置會覆蓋低優先級的配置,沒有的配置進行互補配置

 最后將項目打包為jar包,並將該jar包解壓縮后查看上述四個配置文件:

 

 jar包中只發現兩個在類路徑下的application.yml配置文件,不是類路徑下的配置文件在打包時,如果不做配置是不會打包進jar中的,也會是說前兩個配置在項目打包后,包中是不存在的,所以盡量不要用前兩個位置

2、外部配置文件

當把項目打包后,如何在配置SpringBoot項目呢

(1)命令行參數

項目打包好以后,可以使用命令行參數的形式,來改變想改變的幾個參數,直接在啟動命令后添加啟動參數,如果有多個配置項,可以用空格分開。

java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8088 --server.servlet.context-path=/api

啟動項目時在命令行添加指定的生效配置參數,可以看到配置的8088端口已經生效了。

(2)外置配置文件

如果需要配置的參數較多,使用命令行添加參數的方式就容易出錯且繁瑣了,可以將要使用的參數都寫在配置文件中,啟動項目的時候可以用spring.config.location來指定配置文件的新位置。指定的配置文件和jar包中默認加載的配置文件共同起作用形成互補配置。

啟用項目時使用E盤下的application.yml配置文件,在該配置文件中指定端口號8089

可看到指定外置配置文件中的端口8089已經生效,指定的配置文件和jar包中默認加載的配置文件共同起作用形成互補配置。

(3)配置文件加載順序小結

外部配置加載順序SpringBoot也可以從以下位置加載配置:

優先級從高到低,高優先級的配置覆蓋低優先級的配置,所有的配置會形成互補配置

  1. 命令行參數。所有的配置都可以在命令行上進行指定;
  2. 來自java:comp/env的JNDI屬性;
  3. Java系統屬性(System.getProperties());
  4. 操作系統環境變量 ;
  5. jar包外部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
  6. jar包內部的application-{profile}.properties或application.yml(帶spring.profile)配置文件,再來加載不帶profile
  7. jar包外部的application.properties或application.yml(不帶spring.profile)配置文件
  8. jar包內部的application.properties或application.yml(不帶spring.profile)配置文件
  9. @Configuration注解類上的@PropertySource

根據第7條,只要在jar包同目錄外放置一個application.properties配置文件,就會起作用,同時這個配置文件的優先級還比jar內的高,這個配置十分有用。

  在jar包同路徑下放置一個配置了端口號為8087的application.yml再次啟動項目

可以看到8087端口已經生效了,而且比在jar包里的application.yml中配置的優先級高。

當然springboot官方推出的配置方式比上述的全面,具體可參考springboot官網講述的配置文件加載順序

 


免責聲明!

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



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