IDEA啓動SpringBoot要2分鐘,修改hosts文件無效,最後發現是Apollo配置中心搞的鬼!!

背景:

剛入職新公司,某天IDEA啓動項目的時候,特別慢,某個服務居然要2分鐘,這太影響工作效率了,就找了很多解決辦法,比如

這篇文章也不能解決

修改IDEA VM options也不管用,就這樣忍了幾天,直到今天,我才靈光乍現,項目中用了Apollo配置中心,

這玩意兒之前好像也遇到過啓動慢的問題,我看了我本地c盤的server.properties文件是寫的LOCAL

我馬上把項目中的Apollo配置關閉,瞬間啓動飛起!!!!

github也有相關問題

跟蹤源碼:

同事跟我說他們啓動都用的本地配置,既server.properties文件是寫的LOCAL.

啓動的時候Apollo如果使用本地配置,會打印:

==== Apollo is in local mode! Won't pull configs from remote server for namespace

然後我就跟着找到Apollo的源碼在DefaultConfigFactory類中

我就發現我的項目啓動這個isInLocalMode()就總是返回false,

跟着點進去發現了有段代碼,其中s_manager爲volatile修飾

private static volatile ProviderManager s_manager;

很明顯是個雙重檢測的單例模式..

其中一行代碼

ServiceBootstrap.loadFirst(ProviderManager.class);

點進去能看到是用ServiceLoader來加載ProviderManager;

ServiceLoader在調用ServiceLoader.load的時候,會根據傳入的接口類,遍歷META-INF/services目錄下的以該類命名的文件中的所有類,並實例化返回

下面的截圖可以看到Apollo源碼包下確實有ProviderManager

然後繼續看ProviderManager的實現類DefaultProviderManager,

DefaultProviderManager初始化的時候會去調用Provider接口的initialize()方法

 

繼續點進去看到,如果用本地配置的話,回去c盤這個目錄找server.properties文件:

等等!!

跟我電腦的目錄怎麼不太一樣呢?

修改文件夾的名稱後,啓動從2分鐘變爲12秒

瞬間明白了....

除非之前用這臺電腦的離職的兄弟就這麼忍受了一年??

要麼就是這個文件夾的名字是故意改過的,這個問題太難排查了...

我要是不發現,那豈不是以後的工作時間都要浪費在IDEA啓動上面?

真是一萬匹草泥馬

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章