精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

你絕對(duì)不知道的 SpringBoot 的外部化配置特性!

開發(fā) 前端
今天了不起帶大家研究了一個(gè) SpringBoot? 的外部化配置,并且通過實(shí)際的一個(gè) case 跟蹤代碼的調(diào)用鏈來給大家測(cè)試了一下,雖然說這個(gè)知識(shí)點(diǎn)我們經(jīng)常都在使用,但是沒看到底層源碼的時(shí)候我們并不知道這樣的一個(gè)功能底層是怎樣的復(fù)雜的。

作為 Java? 程序員,相信大家都知道,我們?nèi)粘5?nbsp;SpringBoot? 項(xiàng)目會(huì)有一個(gè)配置文件 application.properties 文件。

里面會(huì)配置很多參數(shù),例如服務(wù)的端口等,這些都只是默認(rèn)值,在不改變配置文件里面內(nèi)容的情況下,我們可以通過在部署的時(shí)候,傳遞一個(gè)相應(yīng)的參數(shù)來替換默認(rèn)的參數(shù)。

那么問題來了,你有想過為什么可以這樣嗎?為什么 SpringBoot 部署時(shí)傳遞的啟動(dòng)配置會(huì)生效,而配置文件中的配置就不生效了呢?或者說這兩者的優(yōu)先級(jí)是什么樣子的呢?

外部化配置

要解釋上面的問題,我們就需要知道 SpringBoot 到底支持哪些配置形式,以及這些配置方式的優(yōu)先級(jí)是什么樣子的,只有搞清楚了這個(gè),才能真正的解決配置的優(yōu)先級(jí)問題。

在 SpringBoot 的官方文檔中我們可以看到這么一段描述

圖片

用了不起我拙劣的英語翻譯一下,大概的意思就是:Spring Boot? 提供了將配置文件外部化的功能,這樣您就可以在不同環(huán)境下使用相同的應(yīng)用程序代碼。您可以使用 properties? 文件、YAML 文件、環(huán)境變量以及命令行參數(shù)來外部化配置文件。

通過 @Value? 注解,屬性值可以直接注入到 beans? 中,通過 Environment abstraction?(環(huán)境映射)可以訪問其他位置,或者使用 @ConfigurationProperties 綁定結(jié)構(gòu)化對(duì)象。

有哪些外部配置

既然上面提到了 SpringBoot? 提供了外部化配置,那么 SpringBoot 提供了哪些配置呢?依然是通過官方文檔,我們可以看到有如下配置列表

圖片

從上圖可以看到 SpringBoot 總共內(nèi)置了 17 種外部化配置方法,而且這 17 種的優(yōu)先級(jí)是從上到下依次優(yōu)先的。這些方式中我們常用的有 4 命令行方法,9 Java 系統(tǒng)環(huán)境變量,10 操作系統(tǒng)環(huán)境變量,以及 12 到 15 到配置文件的形式。

通過上面的順序我們就可以解釋為什么我們通過命令行配置的參數(shù)會(huì)生效,而配置文件中的默認(rèn)值就會(huì)忽略了,從而達(dá)到了覆蓋配置的目的。

PropertySource

上面的文檔中也提到了,SpringBoot? 主要是通過 PropertySource? 機(jī)制來實(shí)現(xiàn)多樣屬性源的,SpringBoot? 的 PropertySource? 是一種機(jī)制,用于加載和解析配置屬性,可以從多種來源獲取這些屬性,例如文件、系統(tǒng)環(huán)境變量、JVM? 系統(tǒng)屬性和命令行參數(shù)等。PropertySource? 是 Spring 框架中的一個(gè)抽象接口,它定義了如何讀取屬性源的方法。

圖片

通過 SpringBoot? 的代碼,我們可以看到,org.springframework.core.env.PropertySource? 是一個(gè)抽象類,實(shí)現(xiàn)在子類有很多,我們上面提到的命令行 PropertySource? 是 org.springframework.core.env.CommandLinePropertySource。整體的類圖如下,涵蓋的內(nèi)容還是很多的,感興趣的小伙伴可以好好研究一番。

圖片

另外在 SpringBoot? 中,我們還可以使用 @PropertySource 注解來自定義指定要加載的屬性文件。例如,可以在應(yīng)用程序的主類上添加以下注解:

@SpringBootApplication
@PropertySource("classpath:customer.properties")
public class CustomerProperties {
// ...
}

這將告訴 SpringBoot? 在 classpath? 下查找名為 customer.properties? 的文件,并將其加載為屬性源。然后,可以使用 @Value?注解將屬性值注入到 bean 中,如下所示:

@Service
public class MyService {
@Value("${my.property}")
private String myProperty;
// ...
}

這里的 ${my.property}? 是從 customer.properties? 文件中獲取的屬性值。如果找不到該屬性,那么 SpringBoot 將使用默認(rèn)值,這里因?yàn)槭亲远x的屬性,是沒有默認(rèn)值的,就會(huì)報(bào)錯(cuò),項(xiàng)目無法啟動(dòng)。

具體實(shí)現(xiàn)是,SpringBoot? 在啟動(dòng)時(shí)會(huì)自動(dòng)加載和解析所有的 PropertySource?,包括默認(rèn)的 PropertySource? 和自定義的PropertySource?。這些屬性值被存儲(chǔ)在 Spring? 環(huán)境中,可以通過 Spring? 的 Environment? 對(duì)象訪問。當(dāng)屬性被注入到 bean? 中時(shí), Spring? 會(huì)查找 Environment 對(duì)象并嘗試解析屬性的值。

總之,SpringBoot? 的 PropertySource? 提供了一種簡單的方法來加載和解析應(yīng)用程序的配置屬性,這些屬性可以從多個(gè)來源獲取。它通過將屬性值存儲(chǔ)在 Spring 環(huán)境中,使其易于在應(yīng)用程序的不同部分中使用。

調(diào)試

為了驗(yàn)證上面說的命令行的參數(shù)配置要優(yōu)先于配置文件,我們創(chuàng)建一個(gè) SpringBoot 項(xiàng)目,并且在 application.properties? 文件中配置一個(gè)參數(shù) name=JavaGeekTech?,而在 IDEA 啟動(dòng)窗口中配置 name=JAVA_JIKEJUSHU,分別如下所示

圖片

圖片

在寫一個(gè)簡單的 HelloController? 類,并且通過 @Value? 注解注入 name? 屬性,接下來我們就需要調(diào)試看下,SpringBoot?是如何將 name? 屬性賦值的。通過驗(yàn)證 name? 會(huì)被賦值成 JAVA_JIKEJISHU? 而不是 JavaGeekTech。

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

@Value("${name}")
private String name;

@GetMapping(value = "/hello")
public String hello() {
return helloService.sayHello(name);
}

}

接著我們啟動(dòng) debug?,因?yàn)槲覀兪腔?nbsp;SpringBoot? 的,屬性的賦值是在創(chuàng)建 bean? 的時(shí)候,從 createBean?,到 doCreateBean?,再到 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean?,因?yàn)槊總€(gè) bean? 都會(huì)經(jīng)過很多 PostProcessor? 的處理,屬性賦值的 PostProcessor? 是 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor#postProcessProperties

圖片

里面的 metadata.inject? 會(huì)調(diào)用到 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.AutowiredFieldElement#inject?,再到 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.AutowiredFieldElement#resolveFieldValue,

org.springframework.beans.factory.support.DefaultListableBeanFactory#resolveDependency,

org.springframework.beans.factory.support.DefaultListableBeanFactory#doResolveDependency,

org.springframework.beans.factory.support.AbstractBeanFactory#resolveEmbeddedValue,

org.springframework.core.env.AbstractPropertyResolver#resolveRequiredPlaceholders,

org.springframework.core.env.PropertySourcesPropertyResolver#getPropertyAsRawString,

org.springframework.core.env.PropertySourcesPropertyResolver#getProperty(java.lang.String, java.lang.Class<T>, boolean)

整體調(diào)用鏈還是挺長的,不過只要跟著思路,在配合斷點(diǎn),還是可以看看看出來的。

圖片

在 getProperty? 方法中,我們可以看到如下的邏輯,根據(jù) key? 獲取到的 value? 值為JAVA_JIKEJISHU。

圖片

繼續(xù)跟蹤 getProperty? 方法,我們可以看到這個(gè)方法 org.springframework.boot.context.properties.source.ConfigurationPropertySourcesPropertySource#findConfigurationProperty(org.springframework.boot.context.properties.source.ConfigurationPropertyName),

圖片

其中的 getSource() 中就有我們配置的兩個(gè)屬性源的數(shù)據(jù),如下所示

圖片

根據(jù)代碼邏輯,我們也可以看到,在迭代的時(shí)候,如果找到了一個(gè)就直接返回了,所以得到的結(jié)果是JAVA_JIKEJISHU。

總結(jié)

今天了不起帶大家研究了一個(gè) SpringBoot? 的外部化配置,并且通過實(shí)際的一個(gè) case 跟蹤代碼的調(diào)用鏈來給大家測(cè)試了一下,雖然說這個(gè)知識(shí)點(diǎn)我們經(jīng)常都在使用,但是沒看到底層源碼的時(shí)候我們并不知道這樣的一個(gè)功能底層是怎樣的復(fù)雜的。

這里還是要敬佩一下 SpringBoot 的開發(fā)者,同時(shí)也建議大家,在日常的開發(fā)中我們需要多看看底層的源碼,通過不斷的看源碼,我們能更好的理解特性的實(shí)現(xiàn)原理,從而加強(qiáng)我們自身的能力。

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2023-03-20 07:32:26

配置代碼Spring

2023-02-27 09:20:24

絕對(duì)定位CSS

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2011-08-12 09:27:33

移動(dòng)設(shè)備虛擬化虛擬化

2024-01-09 07:39:20

maven特性版本

2009-12-10 09:37:43

2022-10-13 11:48:37

Web共享機(jī)制操作系統(tǒng)

2021-02-01 23:23:39

FiddlerCharlesWeb

2011-09-15 17:10:41

2010-08-23 09:56:09

Java性能監(jiān)控

2022-11-04 08:19:18

gRPC框架項(xiàng)目

2020-09-15 08:35:57

TypeScript JavaScript類型

2013-09-09 09:59:39

虛擬化云計(jì)算

2021-10-17 13:10:56

函數(shù)TypeScript泛型

2015-06-19 13:54:49

2020-08-11 11:20:49

Linux命令使用技巧

2021-12-29 11:38:59

JS前端沙箱

2021-12-22 09:08:39

JSON.stringJavaScript字符串

2012-11-23 10:57:44

Shell
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产精品一区在线观看| 国产午夜精品一区二区三区| 992tv快乐视频| 国产免费黄色录像| 女人香蕉久久**毛片精品| 精品欧美久久久| 欧美 日韩 国产 高清| 黄色免费在线播放| 麻豆精品视频在线观看| 久久视频这里只有精品| 亚洲第一中文av| 777电影在线观看| 国内精品伊人久久久久av影院| 久久艹在线视频| 91亚洲一区二区| 国产精品一区二区日韩| 久久久久久久综合狠狠综合| 日本一本a高清免费不卡| 摸摸摸bbb毛毛毛片| 国产欧美88| 精品久久在线播放| 欧美一区二区三区成人久久片| 中文字幕第31页| 亚洲视频碰碰| 国产亚洲欧美另类中文| 天天色天天干天天色| 国产夫妻在线播放| 中文字幕一区二区三区蜜月| 国产欧美日韩一区| 国产毛片aaa| 女人天堂亚洲aⅴ在线观看| 亚洲人成网站999久久久综合| 中文字幕色网站| 免费成人在线电影| 综合av第一页| 日本婷婷久久久久久久久一区二区| 国产精品区在线观看| 国产亚洲高清视频| 最近中文字幕日韩精品| 狠狠人妻久久久久久综合蜜桃| 久久久久黄色| 欧美午夜女人视频在线| 国产一二三四五| 免费看a在线观看| 国产欧美日韩视频一区二区| 图片区小说区区亚洲五月| 丰满少妇xbxb毛片日本| 四虎影视成人精品国库在线观看 | 国产日韩亚洲精品| 国产成人精品免费看视频| 久久成人精品无人区| 国产精品视频精品| 又骚又黄的视频| 免费高清在线一区| 国产美女久久精品| 国产女同91疯狂高潮互磨| 精品夜夜嗨av一区二区三区| 国产美女高潮久久白浆| 91亚洲视频在线观看| 久久成人综合网| 91网站在线免费观看| 国产精品自偷自拍| 国产电影一区在线| 97中文在线| www.桃色av嫩草.com| 国产成人精品亚洲777人妖 | 97久久精品人搡人人玩| 国产网址在线观看| 免费日韩一区二区| 国产精品老女人精品视频| 一区二区三区亚洲视频| 国产精品18久久久久久vr| 国产另类第一区| 欧美拍拍视频| 国产精品久久看| 天天在线免费视频| yellow在线观看网址| 91国偷自产一区二区三区成为亚洲经典| 精品国产成人av在线免| 日韩成人免费av| 欧美第一区第二区| 亚洲一级中文字幕| 99久久99久久精品国产片桃花| 久久av在线播放| 国产毛片aaa| 久久国产综合精品| 国产精品视频免费观看| 国产女人在线视频| 亚洲视频一区在线观看| 国产二级片在线观看| 成人国产一区二区三区精品麻豆| 日韩一区二区三区在线视频| 国产老熟女伦老熟妇露脸| 大胆日韩av| 久久久综合av| 中文字幕乱码人妻二区三区| 国产福利91精品| 日本高清久久一区二区三区| 最新国产在线拍揄自揄视频| 色综合激情五月| 樱花草www在线| 女人av一区| 欧美极品在线播放| 岳乳丰满一区二区三区| 99久久伊人网影院| 国产日韩第一页| 日本美女一区| 精品国产第一区二区三区观看体验| 亚洲色成人网站www永久四虎 | 黄色www网站| 精品久久毛片| 亚洲视频电影图片偷拍一区| 欧美精品一区二区成人| 日本不卡一区二区| 久久久久久久久一区| av片在线观看| 欧美亚州韩日在线看免费版国语版| av影片在线播放| 久久国产成人精品| 日本国产一区二区三区| 乱色精品无码一区二区国产盗| 日本一区二区视频在线观看| 黄色av网址在线播放| 伊人精品久久| 久久人人爽人人爽爽久久 | 日一区二区三区| 国产在线精品一区| 性欧美ⅴideo另类hd| 欧美日韩大陆一区二区| 久久久视频6r| 欧美中文字幕| 欧美日本韩国在线| 欧美aa在线| 亚洲国产精彩中文乱码av在线播放| 久草综合在线视频| 久久超碰97人人做人人爱| 日本精品一区二区三区视频 | 欧美日韩一区二区在线 | 中文字幕久久精品一区二区| 久久激情视频免费观看| 在线观看免费黄色小视频| 国产欧美一区二区在线| 男女视频一区二区三区| 亚洲精华一区二区三区| 青青草原一区二区| 噜噜噜噜噜在线视频| 色婷婷亚洲综合| 成人小视频免费看| 日韩电影在线观看一区| 日韩久久不卡| 国产麻豆一区| 久久色免费在线视频| 国产免费黄色大片| 亚洲国产日产av| 好男人香蕉影院| 亚洲一区国产一区| 亚洲欧美自拍偷拍| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久蜜柚 | a一级免费视频| 男女男精品视频网| 一卡二卡3卡四卡高清精品视频| 激情久久一区二区| 欧美成人精品一区二区| 国产 欧美 自拍| 欧美日韩国产中文精品字幕自在自线| 国产精品无码网站| 久久中文字幕一区二区三区| 午夜一区二区三视频在线观看| 日韩精品一级毛片在线播放| 不卡av在线网站| 国内爆初菊对白视频| 欧美性极品xxxx做受| 亚洲精品一二三四| 夜夜嗨一区二区三区| 色99中文字幕| 国产一区2区在线观看| 久久久久久久久91| 精华区一区二区三区| 欧美精品日韩一区| 国产一级片视频| 久久久午夜电影| 中文字幕在线视频一区二区三区| 欧美另类专区| 欧美激情www| 国产在线一区不卡| 欧美亚洲免费电影| 蜜桃视频在线观看www社区| 精品国产不卡一区二区三区| 黄色一级视频免费看| 最近日韩中文字幕| 久久精品综合视频| 激情五月婷婷综合网| 日韩网站在线免费观看| 日韩电影免费网站| 国产精品乱子乱xxxx| 成人福利一区二区| 国语自产精品视频在免费| av在线播放网| 亚洲第一视频网站| 97成人免费视频| 精品久久久久久中文字幕一区奶水 | 国产精品乱码人人做人人爱 | 红杏成人性视频免费看| 国产精品旅馆在线| caoprom在线| xxxxx成人.com| 四虎精品成人免费网站| 91精品国产欧美一区二区成人 | 亚洲精品国产精品国自| 成人激情午夜影院| 97超碰人人爽| 久久婷婷亚洲| 黄网站欧美内射| 亚洲精品a级片| 先锋在线资源一区二区三区| 国产乱论精品| 亚洲综合在线中文字幕| 国产另类xxxxhd高清| 欧美激情三级免费| 国产在线更新| 中文字幕久热精品在线视频| 亚洲av成人精品一区二区三区在线播放| 欧美日韩精品一二三区| 波多野结衣人妻| 亚洲国产成人av好男人在线观看| 亚洲最大的黄色网址| 久久精品夜夜夜夜久久| 好男人香蕉影院| 大胆亚洲人体视频| 韩国三级丰满少妇高潮| 国产在线麻豆精品观看| 午夜国产一区二区三区| 久久伊人亚洲| 成年人视频在线免费| 性高湖久久久久久久久| 日韩av高清在线看片| 欧美网站在线| 成年人视频网站免费| 中文字幕一区二区三区欧美日韩| 亚洲欧洲一区二区在线观看| 精品国产一区二区三区噜噜噜| 久久久久资源| 天美av一区二区三区久久| 极品校花啪啪激情久久| 精品视频自拍| 国产伦精品一区二区三区在线| 亚洲午夜精品| 国产精品区一区| 久久成人福利| 精品日本一区二区| 亚洲区小说区| 日韩精品一区二区三区色偷偷| 视频一区欧美| 亚洲欧洲精品一区| 日韩中字在线| 少妇高潮大叫好爽喷水| 精品动漫3d一区二区三区免费| 可以看毛片的网址| 亚洲少妇自拍| 天堂中文视频在线| 精品伊人久久久久7777人| 亚洲欧美天堂在线| 国产成人综合视频| 国产精品一区二区人妻喷水| 91蝌蚪porny| xxxx日本黄色| 亚洲视频每日更新| 黄色一级片在线免费观看| 午夜欧美一区二区三区在线播放| 国产一级做a爱片久久毛片a| 日本韩国精品一区二区在线观看| 综合久久中文字幕| 日韩精品在线一区| 午夜在线视频免费| 中文字幕欧美日韩在线| av超碰免费在线| 午夜精品一区二区三区av| 一呦二呦三呦精品国产| 成人看片人aa| 秋霞蜜臀av久久电影网免费| 视频一区二区精品| 狠狠爱成人网| 91人人澡人人爽人人精品| 国产精品正在播放| 少妇毛片一区二区三区| 国产精品黄色在线观看| 国产亚洲自拍av| 在线观看免费亚洲| 黄色小视频免费在线观看| 亚洲亚裔videos黑人hd| 日韩精品亚洲人成在线观看| 日韩av快播网址| 91久久偷偷做嫩草影院电| 日本一区二区视频| 欧美日韩国产欧| 成年网站在线播放| av成人老司机| 国产探花在线视频| 欧美色播在线播放| 国内毛片毛片毛片毛片| 亚洲图片制服诱惑| 97人澡人人添人人爽欧美| 国产在线久久久| 免费国产自久久久久三四区久久| aaa免费在线观看| 石原莉奈在线亚洲三区| 久久精品一二三四| 国产精品私人自拍| 五月天综合激情网| 精品噜噜噜噜久久久久久久久试看| 国产精品视频一区二区久久| 久久免费少妇高潮久久精品99| 麻豆久久久久| 日本10禁啪啪无遮挡免费一区二区| 欧美日韩三级电影在线| 伊人色在线观看| 久久久国产精品麻豆| 日韩男人的天堂| 91精品国产综合久久香蕉的特点| 国产青青草在线| 欧洲成人免费aa| 欧美freesex8一10精品| 国产片侵犯亲女视频播放| 久久超碰97中文字幕| 国产精品天天干| 精品人伦一区二区三区蜜桃免费| 亚洲乱码在线观看| 久久精品一偷一偷国产| 欧美成人毛片| 视频一区视频二区视频三区视频四区国产 | 中国精品一区二区| 亚洲人成电影网站| 一级毛片久久久| 九九九九精品| 国产日韩欧美在线播放不卡| 国产免费a级片| 亚洲主播在线播放| 国内老熟妇对白hdxxxx| 久久97精品久久久久久久不卡| 天天综合在线观看| 国产高清精品软男同| 麻豆freexxxx性91精品| 影音先锋男人看片资源| 欧美日韩免费高清一区色橹橹| 国产在线视频你懂得| 国产精品九九久久久久久久| 伊甸园亚洲一区| 能看的毛片网站| 国产精品乱人伦一区二区| 91国内精品视频| 久久精品国产欧美亚洲人人爽| 91精品国产色综合久久不卡粉嫩| 一区二区三区四区| 国内精品伊人久久久久av影院| 日韩高清dvd碟片| 精品精品欲导航| 欧美sm一区| 婷婷精品国产一区二区三区日韩| 日本成人中文字幕| 永久久久久久久| 日韩女优av电影| 高清视频在线观看三级| 欧美福利一区二区三区| 日本va欧美va欧美va精品| 国产一区在线观看免费| 日韩欧美色综合| 捆绑调教日本一区二区三区| 欧美深深色噜噜狠狠yyy| 日本系列欧美系列| 日韩av手机在线免费观看| 欧美成人激情免费网| 欧洲一区精品| 一区二区av| 国产盗摄精品一区二区三区在线| 日韩成人免费在线视频| 亚洲午夜女主播在线直播| 动漫一区二区三区| 热99这里只有精品| 中文字幕久久午夜不卡| 亚洲国产精品久久人人爱潘金莲 | 97se亚洲国产综合在线| 波多野结衣在线观看一区| 欧美成年人在线观看| 亚洲第一福利社区| 一区二区免费av| 婷婷一区二区三区| 91网在线播放| 国产欧美综合精品一区二区| 美女视频黄免费的久久| 精品爆乳一区二区三区无码av| 亚洲欧洲激情在线| 国产精品99久久免费| 一区二区三区自拍| 国产又黄又猛又爽| 国内揄拍国内精品少妇国语| 凹凸成人精品亚洲精品密奴| 又色又爽又黄18网站| 欧洲一区二区三区在线| 超碰在线97国产| 99re99热|