SpringBoot詳細(xì)講解多個(gè)配置文件的配置流程
一般情況下,springboot默認(rèn)會(huì)在resource目錄下生成一個(gè)配置文件(application.properties或application.yaml),但其實(shí)springboot允許配置多個(gè)配置文件(application.properties或application.yaml),但是這并不意味著這些配置文件一定會(huì)替換默認(rèn)生成的配置文件,它們是互補(bǔ)的存在。如果在某些場(chǎng)景下需要把配置文件單獨(dú)拿出來(lái)并且啟動(dòng)的時(shí)候加載進(jìn)去,那么外部的配置文件將是一個(gè)很好的選擇。
配置文件加載順序
需要注意的是配置文件加載順序加載順序在springboot 2.4.0前后是不一樣的。
springboot 2.4.0及其之前版本的配置文件加載順序
file:./config/
file:./config/*/
file:./
classpath:config/
classpath:
springboot 2.4.0之后版本的配置文件加載順序
file:./config/*/
file:./config/
file:./
classpath:config/
classpath:
區(qū)別在于springboot 2.4.0之后的版本將file:./config/*/的在順序調(diào)整為第一加載順序。
file是指當(dāng)前jar包所在路徑。
classpath是指springboot resource文件夾下路徑。
驗(yàn)證
前期準(zhǔn)備
新建一個(gè)springboot項(xiàng)目
啟動(dòng)類如下:
@SpringBootApplication public class MqApplication { public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(MqApplication.class, args); ConfigurableEnvironment environment = applicationContext.getEnvironment(); String property = environment.getProperty("spring.application.name"); System.out.println("current spring.application.name="+property); } }
配置文件:
spring.application.name=classpath
server.port=8080
為了驗(yàn)證 springboot 2.4.0之前和之后的版本加載順序的不一樣,會(huì)使用兩個(gè)版本對(duì)比。
對(duì)比版本:springboot 2.4.3 和 springboot 2.3.5.RELEASE
下面是不同路徑下配置不同端口和應(yīng)用名以便驗(yàn)證。
路徑 | 端口號(hào) | application.name |
---|---|---|
file:./config/*/ | 8084 | file:./config/*/ |
file:./config/ | 8083 | file:./config/ |
file:./ | 8082 | file:./ |
classpath:config/ | 8081 | classpath:config/ |
classpath: | 8080 | classpath: |
驗(yàn)證配置文件加載順序
根據(jù)上述表格,將配置文件分別復(fù)制到不同的路徑下創(chuàng)建配置文件并按表格修改spring.application.name和server.port屬性值。
啟動(dòng)項(xiàng)目,下面是兩個(gè)版本的啟動(dòng)信息:
從兩張圖中可以得出結(jié)論:
- springboot 2.4.0前后配置文件加載順序不一樣
- 高優(yōu)先級(jí)的會(huì)覆蓋掉低優(yōu)先級(jí)相同的屬性
驗(yàn)證屬性互補(bǔ)
修改配置文件:
classpath:配置文件
刪除spring.application.name屬性,增加server.error.path屬性
server.port=8080
server.error.path=/test
file:./配置文件
新增server.servlet.context-path屬性
spring.application.name=file:.
server.port=8082
server.servlet.context-path=file_context
file:./config/*/配置文件
保持不變
server.port=8084
spring.application.name=file:./config/*/
修改啟動(dòng)類main方法在控制臺(tái)打印server.error.path
public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(MqApplication.class, args); ConfigurableEnvironment environment = applicationContext.getEnvironment(); String property = environment.getProperty("spring.application.name"); System.out.println("current spring.application.name="+property); String errorPath = environment.getProperty("server.error.path"); System.out.println("errorPath="+errorPath); }
啟動(dòng)項(xiàng)目
從上面截圖中可以發(fā)現(xiàn)三個(gè)配置文件中的所有屬性都被加載出來(lái)了,而且優(yōu)先級(jí)高的配置文件中的屬性會(huì)覆蓋優(yōu)先級(jí)低的配置文件中的屬性。
總結(jié)
springboot中可以配置多個(gè)配置文件,并且這些配置文件是可以共存的。當(dāng)屬性相同時(shí),優(yōu)先級(jí)高的配置文件會(huì)覆蓋優(yōu)先級(jí)低的配置文件中的屬性;當(dāng)屬性不同時(shí),最終的配置會(huì)取各個(gè)配置文件中屬性的并集。
到此這篇關(guān)于SpringBoot詳細(xì)講解多個(gè)配置文件的配置流程的文章就介紹到這了,更多相關(guān)SpringBoot配置文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot SSO輕松實(shí)現(xiàn)(附demo)
這篇文章主要介紹了SpringBoot SSO輕松實(shí)現(xiàn)(附demo),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01SpringSecurity怎樣使用注解控制權(quán)限
這篇文章主要介紹了SpringSecurity怎樣使用注解控制權(quán)限的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Java中構(gòu)造器內(nèi)部的多態(tài)方法的行為實(shí)例分析
這篇文章主要介紹了Java中構(gòu)造器內(nèi)部的多態(tài)方法的行為,結(jié)合實(shí)例形式分析了java構(gòu)造器內(nèi)部多態(tài)方法相關(guān)原理、功能及操作技巧,需要的朋友可以參考下2019-10-10Java MD5消息摘要算法原理及實(shí)現(xiàn)代碼
這篇文章主要介紹了Java MD5消息摘要算法原理及實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09注入jar包里的對(duì)象,用@autowired的實(shí)例
這篇文章主要介紹了注入jar包里的對(duì)象,用@autowired的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09java中線程池最實(shí)用的創(chuàng)建與關(guān)閉指南
試中經(jīng)常會(huì)問(wèn)到,創(chuàng)建一個(gè)線程池需要哪些參數(shù)啊,線程池的工作原理啊,卻很少會(huì)問(wèn)到線程池如何安全關(guān)閉的,下面這篇文章主要給大家介紹了關(guān)于java中線程池最實(shí)用的創(chuàng)建與關(guān)閉的相關(guān)資料,需要的朋友可以參考下2021-09-09Sentinel 整合SpringCloud的詳細(xì)教程
Spring Cloud Alibaba Sentinel 是阿里巴巴提供的,致力于提供微服務(wù)一站式解決方案,這篇文章主要介紹了Sentinel 之 整合SpringCloud的相關(guān)知識(shí),需要的朋友可以參考下2021-10-10Kotlin語(yǔ)法學(xué)習(xí)-變量定義、函數(shù)擴(kuò)展、Parcelable序列化等簡(jiǎn)單總結(jié)
這篇文章主要介紹了Kotlin語(yǔ)法學(xué)習(xí)-變量定義、函數(shù)擴(kuò)展、Parcelable序列化等簡(jiǎn)單總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-05-05