<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
上次分享瞭如何一步一步搭建一個springboot的專案,詳細參見《5分鐘快速搭建一個springboot的專案》,最終的結果是在”8080“埠搭建起了服務,併成功存取。不知道有小夥伴是否有疑惑,springboot應該有組態檔的,一般的組態檔都是application.properties或者application.yml,的確是這樣的。但是我確實沒有這些組態檔,服務正常在”8080“埠啟動,這是因為在springboot內部有一套預設的機制。今天不聊這些預設的機制,聊一聊application.properties/application.yml檔案。
前面說到沒有設定application.properties檔案,現在我在main/resources資料夾下新建一個application.properties檔案,並且寫上如下的設定
然後,啟動專案,
好了,通過上面的啟動結果截圖,看到服務在埠”9090“啟動了。那麼如果在該目錄下在設定一個application.yml檔案吶,
啟動結果如下,
可以看到依然是在埠”9090“啟動服務。為此得出這樣個結論:在相同資料夾下如果有application.properties和application.yml兩個檔案,那麼application.properties檔案會覆蓋application.yml檔案,生效的是application.properties檔案。
什麼是yml檔案
yml是由YAML (YAML Aint Markup Language)編寫的檔案格式,是一種很直觀的資料序列化方式。很簡單就是一種新的檔案格式,和XML、prperties檔案類似。
看到這個標題的小夥伴肯定會說,難道application.properties可以在其他路徑,沒錯,猜對了。application.properties/.yml我們是放在了main/resources資料夾下,在專案執行的時候該資料夾下的檔案會被拷貝到classes資料夾下,所以該路徑又叫做classpath。
在springboot的原始碼中搜尋”application.properties“,搜到ConfigFileApplicationListener這樣一個類,在該類的註釋上有下面這段話,
* {@link EnvironmentPostProcessor} that configures the context environment by loading * properties from well known file locations. By default properties will be loaded from * 'application.properties' and/or 'application.yml' files in the following locations: * <ul> * <li>file:./config/</li> * <li>file:./config/{@literal *}/</li> * <li>file:./</li> * <li>classpath:config/</li> * <li>classpath:</li> * </ul>
大體意思是”EnvironmentPostProcessor通過從眾所周知的檔案路徑載入properties來設定上下文環境。預設的properties來自application.properties/application.yml檔案,這些檔案來自以下路徑“,
file:./config/ 根資料夾(專案資料夾)下的config目錄
file:./config/{@literal *}/ 根檔案資料夾(專案資料夾)下的config/*/目錄
file:./ 根檔案資料夾(專案資料夾)下
classpath:config/ classpath下的config/
classpath: classpath下
好了,我們已經知道了application.properties/application.yml檔案會從以上的幾個位置載入,且我們設定的main/resources其實就是上面的classpath:,那麼上面的這些路徑是不是也有先後順序吶,順著ConfigFileApplicationListener這個類繼續往下看,看到了下面的這樣一個屬性,
// Note the order is from least to most specific (last one wins) private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/*/,file:./config/";
可以看到這個DEFAULT_SEARCH_LOCATIONS 指定的就是上面的幾個值,且上面的註釋很有意思,但是我沒翻譯好,通過例子來驗證吧。已經知道了application.properties和application.yml的優先順序,我們就用application.properties檔案來驗證就好了,在resources/config(執行路徑:classpath:/config/)下有application.properties,
看下現在使用的是哪個埠,
使用的是9092,也就說resouces/config的優先順序大於resources,即,classpath:/config/>classpath:/。下面再看下file:/
在專案的根路徑下新建了application.properties檔案,起server.port為9093,下面看服務使用的哪個埠,
服務使用的是9093,優先順序為:file:/>classpath:/config/>classpath:/。現在我在專案的路徑下增加config/my/路徑,且增加application.properties檔案,
測試結果如下,
服務在埠”9094“啟動,說明優先順序為:file:./config/*/>file:./>classpath:/>classpath:/config/,最後一個驗證的點為file:/config,這個我想無須驗證了肯定優先順序是最高的,為此優先順序順序由高到低為:file:./config/ > file:./config/*/ > file:./ > classpath:/ > classpath:/config/,通俗點說就是:專案根路徑下的config>專案根路徑下的config/*/>專案根路徑>classpath:/config>classpath:/
本文主要分析了springboot的預設組態檔application.properties和application.yml的優先順序,以及springboot預設的載入路徑及每個路徑的優先順序;
1、同級下,application.properties檔案優先順序大於application.yml,前者會覆蓋後者;
2、springboot的預設載入路徑有5個,分別是classpath:/、classpath:/config/、專案根路徑、專案根路徑/config/*/、專案根路徑/config/,會從這5個路徑下載入application.properties或application.yml;
3、5個預設的載入路徑的優先順序為:專案根路徑下的config > 專案根路徑下的config/*/ > 專案根路徑 > classpath:/config > classpath:/,前者會覆蓋後者
不知道小夥伴是否有這樣的疑惑,我們只能使用預設的組態檔嗎?只能使用預設的載入路徑嗎?當然springboot不會這樣做,後面繼續揭曉,敬請期待。
到此這篇關於springboot預設的5種載入路徑的文章就介紹到這了,更多相關springboot預設載入路徑內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45