詳解springboot啟動(dòng)時(shí)是如何加載配置文件application.yml文件
今天啟動(dòng)springboot時(shí),明明在resources目錄下面配置了application.yml的文件,但是卻讀不出來,無奈看了下源碼,總結(jié)一下springboot查找配置文件路徑的過程,能力有限,歡迎各位大牛指導(dǎo)?。?!
spring加載配置文件是通過listener監(jiān)視器實(shí)現(xiàn)的,在springboot啟動(dòng)時(shí):
在容器啟動(dòng)完成后會(huì)廣播一個(gè)SpringApplicationEvent事件,而SpringApplicationEvent事件是繼承自ApplicationEvent時(shí)間的,代碼如下:
由于ConfigFileApplicationListener監(jiān)聽器實(shí)現(xiàn)了SmartApplicationListener接口,而SmartApplicationListener接口繼承了ApplicationListener<ApplicationEvent>接口,所以能監(jiān)聽到上面廣播出來的SpringApplicationEvent事件,類的繼承圖如下:
SmartApplicationListener是繼承自ApplicationListener:
在ConfigFileApplicationListener中監(jiān)聽事件的方法:
postProcessEnvironment方法是查找application.yml配置文件的入口方法:
在load方法里面才是真正查找配置文件的過程:
默認(rèn)先讀取的是location,然后是配置文件的名字“application”,最后才是文件類型“properties”或者“yml”;
localtion有多種,可以自行debug:有file:./和file:./config和classpath等目錄;
文件類型默認(rèn)的有四種:properties、xml、yml、yaml
最后查找的具體路徑:location + name + '-' + profile + '.' + ext
根據(jù)拼出來的路徑去查找配置文件,一般配置文件都放在classpath目錄下面,當(dāng)讀取到classpath目錄下的配置文件的時(shí)候,程序去加載配置文件:
當(dāng)加載配置文件時(shí),程序先會(huì)讀取配置文件的spring.profiles.active屬性,確定加載什么環(huán)境的配置文件(我是加載dev的):
然后在讀取到的配置文件的屬性加載到profiles隊(duì)列中重新加載配置文件,代碼如下,所以任何項(xiàng)目都必須現(xiàn)有一個(gè)基礎(chǔ)的配置文件,如application.yml,然后在這個(gè)配置文件里面有一個(gè)active屬性;
程序會(huì)先拿到這個(gè)屬性,放到profiles屬性中,重新去加載配置文件如application-dev.yml,程序如下:
注:這篇文章是為了解決配置文件找不到而寫的,是為了解決問題而寫的,主要是解析查找配置文件路徑的過程,具體的解析配置文件的過程,讀者可以細(xì)看源碼,最后我也找到了配置文件為什么找不到的原因,主要是因?yàn)閕dea編譯時(shí),classpath路徑下面沒有application.yml文件,復(fù)制配置文件到classpath目錄下,問題就解決了!
到此這篇關(guān)于詳解springboot啟動(dòng)時(shí)是如何加載配置文件application.yml文件的文章就介紹到這了,更多相關(guān)springboot啟動(dòng)加載application.yml內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. python math模塊的基本使用教程2. 如何用python開發(fā)Zeroc Ice應(yīng)用3. ASP錯(cuò)誤捕獲的幾種常規(guī)處理方式4. python基于opencv批量生成驗(yàn)證碼的示例5. npm下載慢或下載失敗問題解決的三種方法6. ASP編碼必備的8條原則7. 使用Spry輕松將XML數(shù)據(jù)顯示到HTML頁的方法8. python用pyecharts實(shí)現(xiàn)地圖數(shù)據(jù)可視化9. python軟件測試Jmeter性能測試JDBC Request(結(jié)合數(shù)據(jù)庫)的使用詳解10. python uuid生成唯一id或str的最簡單案例
