關(guān)于SpringBoot配置項(xiàng)的優(yōu)先級,不再有配置不生效的問題
優(yōu)先級原理介紹
下表中各種配置的優(yōu)先級,序號越小優(yōu)先級越高。
優(yōu)先級越高的意思就是:spring 按照序號的順序,由小到大到各種源頭查找配置項(xiàng),找到了,就不繼續(xù)找后面的源了。
舉例說明:
- 當(dāng)spring.profiles.active=dev時(shí)候,
- 源代碼resources目錄下有兩個(gè)配置文件:application.properties 和 application-dev.properties
按照下表規(guī)則:
- application-dev.properties 優(yōu)先級為7
- application.properties 優(yōu)先級為9
- application-dev.properties 和 application.properties 同時(shí)配置了jdbc相關(guān)配置,那么生效的是 application-dev.properties
優(yōu)先級順序
優(yōu)先級 | 配置項(xiàng)說明 | 使用說明 |
1 | java啟動命令行參數(shù) | java -jar xxx.jar --key=value |
2 | 在J2EE容器里面配配置 | J2EE 容器屬于古老過時(shí)技術(shù),使用復(fù)雜,后面再專題介紹 |
3 | java 系統(tǒng)屬性 (System.getProperties()) | java -Dkey=value -jar your-application.jar 注意點(diǎn): -Dkey=value 等號左右不能有空格 |
4 | 操作系統(tǒng)環(huán)境變量 | 大家經(jīng)常配置系統(tǒng)環(huán)境變量,不做解釋 |
5 | Spring 內(nèi)置隨機(jī)變量 | 主要測試場景,比如你想生成一個(gè)int隨機(jī)數(shù),直接用即可: @Value("${random.int}") private int random; 如果你的啟動命令行也配置了 random.int,那么啟動命令行優(yōu)先級高 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對應(yīng)的配置文件,會自動打包到j(luò)ar里面 |
8 | jar包外部 application.properties | 和6類似,只是文件名是固定的 |
9 | jar包內(nèi)部 application.properties | 和7類似,只是文件名是固定的 |
10 | @PropertySource annotations on your @Configuration classes | 需要自己實(shí)現(xiàn)配置項(xiàng)獲取邏輯,spring預(yù)留的接口,比如apollo配置服務(wù),這種中間件都是通過這個(gè)接口實(shí)現(xiàn)從遠(yuǎn)程服務(wù)器加載配置項(xiàng)的 |
11 | SpringApplication.setDefaultProperties | 調(diào)用spring接口代碼里面硬編碼 |
JNDI簡單介紹
需要在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異步無法獲取用戶認(rèn)證信息的解決方法
最近使用 Springboot 中 @Async 注解異步調(diào)用方法時(shí),發(fā)現(xiàn)無法獲取到用戶認(rèn)證信息,本文小編給大家介紹了Spring Security異步無法獲取用戶認(rèn)證信息的原因和解決方法,并通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09SpringBoot實(shí)現(xiàn)過濾器攔截器的耗時(shí)對比
這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)過濾器攔截器的輸出接口耗時(shí)對比,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-06-06java數(shù)據(jù)結(jié)構(gòu)與算法之馬踏棋盤
這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之馬踏棋盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02springboot實(shí)現(xiàn)單文件和多文件上傳
這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)單文件和多文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11