關(guān)于SpringBoot配置項(xiàng)的優(yōu)先級(jí),不再有配置不生效的問(wèn)題
優(yōu)先級(jí)原理介紹
下表中各種配置的優(yōu)先級(jí),序號(hào)越小優(yōu)先級(jí)越高。
優(yōu)先級(jí)越高的意思就是:spring 按照序號(hào)的順序,由小到大到各種源頭查找配置項(xiàng),找到了,就不繼續(xù)找后面的源了。
舉例說(shuō)明:
- 當(dāng)spring.profiles.active=dev時(shí)候,
- 源代碼resources目錄下有兩個(gè)配置文件:application.properties 和 application-dev.properties
按照下表規(guī)則:
- application-dev.properties 優(yōu)先級(jí)為7
- application.properties 優(yōu)先級(jí)為9
- application-dev.properties 和 application.properties 同時(shí)配置了jdbc相關(guān)配置,那么生效的是 application-dev.properties
優(yōu)先級(jí)順序
| 優(yōu)先級(jí) | 配置項(xiàng)說(shuō)明 | 使用說(shuō)明 |
| 1 | java啟動(dòng)命令行參數(shù) | java -jar xxx.jar --key=value |
| 2 | 在J2EE容器里面配配置 | J2EE 容器屬于古老過(guò)時(shí)技術(shù),使用復(fù)雜,后面再專(zhuān)題介紹 |
| 3 | java 系統(tǒng)屬性 (System.getProperties()) | java -Dkey=value -jar your-application.jar 注意點(diǎn): -Dkey=value 等號(hào)左右不能有空格 |
| 4 | 操作系統(tǒng)環(huán)境變量 | 大家經(jīng)常配置系統(tǒng)環(huán)境變量,不做解釋 |
| 5 | Spring 內(nèi)置隨機(jī)變量 | 主要測(cè)試場(chǎng)景,比如你想生成一個(gè)int隨機(jī)數(shù),直接用即可: @Value("${random.int}") private int random; 如果你的啟動(dòng)命令行也配置了 random.int,那么啟動(dòng)命令行優(yōu)先級(jí)高 java -jar xxx.jar --random.int=100 |
| 6 | jar包外部 application-{profile}.properties | java -jar your-springboot-app.jar --spring.config.location=file:/config/application-dev.properties |
| 7 | jar包內(nèi)部 application-{profile}.properties | 項(xiàng)目源代碼src/main/resources對(duì)應(yīng)的配置文件,會(huì)自動(dòng)打包到j(luò)ar里面 |
| 8 | jar包外部 application.properties | 和6類(lèi)似,只是文件名是固定的 |
| 9 | jar包內(nèi)部 application.properties | 和7類(lèi)似,只是文件名是固定的 |
| 10 | @PropertySource annotations on your @Configuration classes | 需要自己實(shí)現(xiàn)配置項(xiàng)獲取邏輯,spring預(yù)留的接口,比如apollo配置服務(wù),這種中間件都是通過(guò)這個(gè)接口實(shí)現(xiàn)從遠(yuǎn)程服務(wù)器加載配置項(xiàng)的 |
| 11 | SpringApplication.setDefaultProperties | 調(diào)用spring接口代碼里面硬編碼 |
JNDI簡(jiǎn)單介紹
需要在J2EE容器里面配置,以Tomcat為例,需要在tomcat 的Server.xml Context.xml 中配置JNDI, 然后使用的地方j(luò)ndi-lookup , JNDI是比較古老的技術(shù),現(xiàn)在基本上廢棄了。


Web.xml 中查找,從容器中查找變量,將變量暴漏給當(dāng)前應(yīng)用, 當(dāng)前應(yīng)用就直接可以使用了。

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Security異步無(wú)法獲取用戶認(rèn)證信息的解決方法
最近使用 Springboot 中 @Async 注解異步調(diào)用方法時(shí),發(fā)現(xiàn)無(wú)法獲取到用戶認(rèn)證信息,本文小編給大家介紹了Spring Security異步無(wú)法獲取用戶認(rèn)證信息的原因和解決方法,并通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
排查Java應(yīng)用內(nèi)存泄漏問(wèn)題的步驟
這篇文章主要介紹了排查Java應(yīng)用內(nèi)存泄漏問(wèn)題的步驟,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下2020-11-11
SpringBoot實(shí)現(xiàn)過(guò)濾器攔截器的耗時(shí)對(duì)比
這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)過(guò)濾器攔截器的輸出接口耗時(shí)對(duì)比,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-06-06
java數(shù)據(jù)結(jié)構(gòu)與算法之馬踏棋盤(pán)
這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之馬踏棋盤(pán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
springboot實(shí)現(xiàn)單文件和多文件上傳
這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)單文件和多文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11

