日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

聊一聊 SpringBoot 中配置加載優(yōu)先級(jí)?

 

本文主要針對(duì) spring.profiles.active、spring.config.location 以及
spring.config.additional-location 的作用機(jī)制及優(yōu)先級(jí)問題進(jìn)行實(shí)踐對(duì)比。

本文案例工程已上傳 github 倉(cāng)庫(kù):
https://github.com/glmApper/springboot-series-guides/tree/master/guides-properties

spring.profiles.active

除了 application.properties 文件之外,profile-specific 配置也可以通過以下命名方式來定義:application-{profile}.properties。在沒有使用 active 指定 profiles 的情況下,Environment 會(huì)指定一組默認(rèn)的 profiles(默認(rèn)情況下是[default]),換句話說就是,如果沒有顯示的激活 profiles 配置文件,則默認(rèn)加載的是
application-default.properties 配置文件。

profile-specific 配置文件的屬性與標(biāo)準(zhǔn) application.properties 從相同的位置加載(一般是 classpath 下);profile-specific 指定的 properties 配置文件始終覆蓋默認(rèn)配置。

在案例工程中(guides-properties),resources 下面包括 application.properties 和
application-dev.properties 兩份配置文件

application.properties 文件配置

spring.application.name=appNameInnertestKey=key-default


application-dev.properties 文件配置

testKey=key-dev

通過以下代碼在啟動(dòng)時(shí)將配置值輸出:

@Value("${testKey}")private String testKey;@PostConstructprivate void init(){    System.out.println("-------------------------------");    System.out.println(testKey);    System.out.println("-------------------------------");}復(fù)制代碼

不指定 spring.profiles.active 時(shí)

通過 JAVA -jar
guides-properties/target/guides-properties-0.0.1-SNAPSHOT.jar 啟動(dòng)工程,console 輸出如下:

2020-01-04 00:08:47.279  INFO 11050 --- [           main] com.glmapper.bridge.boot.BootStrap       : No active profile set, falling back to default profiles: default-------------------------------key-default-------------------------------復(fù)制代碼

結(jié)論是,如果不顯示指定 profiles,則使用默認(rèn)的。

指定 spring.profiles.active 時(shí)

通過 java -jar -Dspring.profiles.active=dev
guides-properties/target/guides-properties-0.0.1-SNAPSHOT.jar 啟動(dòng)工程,console 輸出如下:

2020-01-04 00:08:14.426  INFO 11040 --- [           main] com.glmapper.bridge.boot.BootStrap       : The following profiles are active: dev-------------------------------key-dev-------------------------------復(fù)制代碼

結(jié)論是,在顯示指定 profiles 的情況下,會(huì)覆蓋默認(rèn) application.properties 中的配置值。

spring.config.location

在 SpringBoot 2.x 中 spring.config.location 的語(yǔ)義發(fā)生了變更(此項(xiàng)配置會(huì)導(dǎo)致 classpath 中的 application.properties 不再生效)。原因如下:

private Set<String> getSearchLocations() {    // spring.config.location 直接使用此份文件,不會(huì)再處理其他配置文件    if (this.environment.containsProperty(CONFIG_LOCATION_PROPERTY)) {        return getSearchLocations(CONFIG_LOCATION_PROPERTY);    }    Set<String> locations = getSearchLocations(CONFIG_ADDITIONAL_LOCATION_PROPERTY);    locations.addAll(            asResolvedSet(ConfigFileApplicationListener.this.searchLocations, DEFAULT_SEARCH_LOCATIONS));    return locations;}復(fù)制代碼

在工程的根目錄的 conf 目錄下新建一個(gè)
application-conf.properties 配置文件,內(nèi)容如下:

testKey=key-spring.config.location復(fù)制代碼

通過 java -jar -Dspring.config.location=
conf/application-conf.properties guides-properties/target/guides-properties-0.0.1-SNAPSHOT.jar 啟動(dòng)工程,發(fā)現(xiàn)啟動(dòng)報(bào)錯(cuò),原因是因?yàn)?nbsp;application-conf.properties 中沒有 配置 spring.application.name,而 spring.application.name 是在 resources 目錄下的 application.properties 中的,所以也間接說明前面提到的,會(huì)使 classpath 下的配置失效。新增 spring.application.name 之后,重新啟動(dòng)工程,

spring.application.name=guides-propertiestestKey=key-spring.config.location復(fù)制代碼

輸出結(jié)果如下:

2020-01-04 00:19:12.225  INFO 11147 --- [           main] com.glmapper.bridge.boot.BootStrap       : No active profile set, falling back to default profiles: default-------------------------------key-spring.config.location-------------------------------復(fù)制代碼

所以在使用 spring.config.location 指定外部配置文件時(shí),需要此份配置文件需全量滿足當(dāng)前工程運(yùn)行時(shí)所需,因?yàn)樗粫?huì)去與 resources 目錄下的配置文件去做 merge 操作。

spring.config.additional-location

在使用
spring.config.additional-location 這種方式自定義 locations 時(shí),除了默認(rèn) locations 之外,還會(huì)使用 spring.config.additional-location 指定的。

additional-location:言外之意就是增量的配置

在工程的根目錄的 conf 目錄下新建一個(gè)
application-addition.properties 配置文件,內(nèi)容如下:

testKey=key-addition復(fù)制代碼

通過 java -jar
-Dspring.config.additional-location=conf/application-addition.properties guides-properties/target/guides-properties-0.0.1-SNAPSHOT.jar 啟動(dòng)工程,輸出結(jié)果如下:

2020-01-04 00:28:30.048  INFO 11384 --- [           main] com.glmapper.bridge.boot.BootStrap       : No active profile set, falling back to default profiles: default-------------------------------key-addition-------------------------------復(fù)制代碼

結(jié)論是,會(huì)覆蓋默認(rèn) application.properties 中的配置值。

spring.config.additional-location 與 spring.profiles.active 配置加載關(guān)系

spring.config.location 不用多數(shù),它就是獨(dú)立的一份,使用它就不能使用其它的。所以這里只分析
spring.config.additional-location 與 spring.profiles.active 配置加載關(guān)系。

同時(shí)指定兩個(gè)配置

通過 java -jar -Dspring.profiles.active=dev
-Dspring.config.additional-location=conf/application-addition.properties guides-properties/target/guides-properties-0.0.1-SNAPSHOT.jar 啟動(dòng)工程,輸出如下:

2020-01-04 00:32:59.044  INFO 11451 --- [           main] com.glmapper.bridge.boot.BootStrap       : The following profiles are active: dev-------------------------------key-dev-------------------------------復(fù)制代碼

為了排除與 -D 參數(shù)順序有關(guān),也使用如下方式再執(zhí)行一次:java -jar
-Dspring.config.additional-location=conf/application-addition.properties -Dspring.profiles.active=dev guides-properties/target/guides-properties-0.0.1-SNAPSHOT.jar,輸出結(jié)果與前面相同,所以可以得出,spring.profiles.active 的優(yōu)先級(jí)比 spring.config.additional-location 要高。

`spring.config.additional-location` 指定差異增量配置


spring.config.additional-location 中增加 additionKey

testKey=key-additionadditionKey=testAddition

使用 java -jar
-Dspring.config.additional-location=conf/application-addition.properties -Dspring.profiles.active=dev guides-properties/target/guides-properties-0.0.1-SNAPSHOT.jar 啟動(dòng)工程,輸出如下:

2020-01-04 11:44:42.227  INFO 12821 --- [           main] com.glmapper.bridge.boot.BootStrap       : The following profiles are active: dev-------------------------------key-devtestAddition-------------------------------復(fù)制代碼

結(jié)論是
spring.config.additional-location 可以用于提供出 profiles 機(jī)制或者默認(rèn)方式之外的增量配置。

小結(jié)

在使用外部化配置文件時(shí),執(zhí)行順序?yàn)椋?/p>

spring.config.location > spring.profiles.active >
spring.config.additional-location > 默認(rèn)的 application.proerties。

其中通過 spring.profiles.active 和
spring.config.additional-location指定的配置文件會(huì)與 默認(rèn)的application.proerties merge 作為最終的配置,spring.config.location 則不會(huì)。

作者:glmapper

鏈接:
https://juejin.im/post/5e10136d5188253aae7d828c

分享到:
標(biāo)簽:SpringBoot
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定