springboot啟動讀取外部配置文件


springboot啟動讀取外部配置文件

  有時候項目打包成一個jar 或者war ,通過java -jar 命令運行springboot 項目,因為springboot 項目有自己的application.properties 配置文件,但是我們打完包之后,它也會打到包里邊,倒是也能打開壓縮包修改properties 文件,但是也是較為麻煩。

  現在有如下需求,比如客戶需要在很多個服務器部署一套項目,但是它們的數據庫連接不一樣,我們不能針對於這么多服務器,多次打包,很惡心,當然可以打完包,復制一堆,分別修改壓縮包里邊的配置文件。

讀取外部配置文件

springboot 有讀取外部配置文件的方法,如下優先級:

第一種是在jar包的同一目錄下建一個config文件夾,然后把配置文件放到這個文件夾下。

第二種是直接把配置文件放到jar包的同級目錄。

第三種在classpath下建一個config文件夾,然后把配置文件放進去。

第四種是在classpath下直接放配置文件。

看到如上的優先級了嗎?也就是說springboot 默認是優先讀取它本身同級目錄下的一個config/application.properties 文件的。我們通常在src/main/resources 文件夾下創建的application.properties 文件的優先級竟然是最低的!!!。

下邊這個是config/application.properties 文件放置位置。提前我將它的port 設置為1000 ,另外war 包里也有一個application.properties 文件,它的port 是3000 。

 

 

 

直接命令執行:

java -jar cloud-lyzx-project.war

的確發現訪問端口是1000 ,而不是里邊的3000 。

然后我又拿到外邊來,下邊這個是application.properties 文件放置位置。提前我將它的port 設置為2000

 

在當前位置直接啟動jar包:

java -jar cloud-lyzx-project.war

你會發現,訪問端口是2000 ,還不是里邊的3000 。

關於讀取配置文件的問題,如下圖:

 

 

總結了一下他發現的:

內外都有配置文件,配置文件讀取是有優先級,外配置文件優於內配置文件讀取。(這個沒疑問)。

如果內配置文件里有外配置文件沒有的配置,那兩者互補。比如外配置文件沒有配置數據庫,內配置文件里配置了數據庫,那內配置文件的配置會被使用。

如果內配置文件里和外配置文件里都有相同的配置,比如兩者都配置了數據庫,但是兩個連接的不同,那外配置文件會覆蓋內配置文件里的配置。

感謝那位大神了,我沒有詳細研究這個,有興趣的自我驗證下吧。

 

 

參考文章:

https://www.toutiao.com/i6717995789072728590

 


免責聲明!

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



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