精品欧美一区二区三区在线观看 _久久久久国色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)

久久久久亚洲av无码专区| 日韩欧美精品在线观看视频| h狠狠躁死你h高h| 亚洲欧洲一区| 亚洲视频在线免费观看| 日韩爱爱小视频| 少妇av在线| 91女神在线视频| 91精品久久久久久久久青青| 久久精品99久久久久久| 中国av一区| 日韩精品一区二区三区swag| 无码人妻精品一区二区三区在线 | 久久婷婷麻豆| 不卡伊人av在线播放| 91精品小视频| 国产美女精品视频免费播放软件 | 国产又粗又猛又爽又| 欧美日韩亚洲一区二区三区在线| 精品视频—区二区三区免费| 91欧美一区二区三区| 成入视频在线观看| 亚洲欧洲精品天堂一级| 精品视频一区二区三区四区| 亚洲视频在线观看免费视频| 国产精品久久久亚洲一区| 欧美成人亚洲成人| 精品丰满少妇一区二区三区| 任你弄精品视频免费观看| 69久久99精品久久久久婷婷 | 顶级黑人搡bbw搡bbbb搡| 婷婷五月色综合香五月| 欧美成人aa大片| 久久综合在线观看| 欧美日韩伦理一区二区| 狠狠色狠色综合曰曰| 欧美日韩激情四射| 欧美成年黄网站色视频| 久久久不卡网国产精品二区| 91丨九色丨国产在线| 中文在线观看av| 日日摸夜夜添夜夜添精品视频| 97免费视频在线| 久久久久久久久久一区二区三区| 久久久久久久久久久久久久| 色婷婷久久一区二区| 手机看片日韩av| 你微笑时很美电视剧整集高清不卡| 亚洲第一天堂av| 国产原创剧情av| 国产精品对白| 亚洲福利视频专区| 国产激情第一页| 麻豆精品少妇| 亚洲精品网址在线观看| 国产成人无码一区二区在线观看| 好吊妞国产欧美日韩免费观看网站| 日韩欧美在线一区二区三区| 黄色片子免费看| 亚洲国产一区二区三区网站| 日韩美女视频一区二区在线观看| 久久艹这里只有精品| 日韩免费高清视频网站| 欧美va亚洲va在线观看蝴蝶网| 国产精品成人免费一区久久羞羞| 精品中文字幕一区二区三区四区 | 日韩美女av在线免费观看| 亚洲另类在线观看| 日韩黄色一级片| 国产日韩欧美在线看| 国产乱淫片视频| 国产一区二区三区四区五区入口| 国产色综合天天综合网 | 国产高清无密码一区二区三区| 亚洲字幕在线观看| 天天综合网在线| 国产欧美一区二区精品性| 一级二级三级欧美| 污视频免费在线观看| 污片在线观看一区二区| 国产一级片黄色| 亚洲ww精品| 精品久久一区二区| www.狠狠爱| 五月天久久网站| 97视频在线观看成人| 日韩免费av网站| 激情都市一区二区| 精品久久一区二区三区蜜桃| 搞黄视频免费在线观看| 亚洲精品视频免费看| 亚洲国产精品久久久久婷蜜芽| 国产成人毛片| 亚洲成人性视频| 四季av中文字幕| 激情欧美一区二区三区| 国产精品成人一区二区| 精品人妻aV中文字幕乱码色欲| 97精品国产露脸对白| 一区二区三视频| 欧美少妇精品| 在线成人免费视频| ass精品国模裸体欣赏pics| 国产精品久久久久久| 午夜精品福利在线观看| 国产又粗又大又爽| 91麻豆国产福利精品| 黄色一级片av| 欧美aaa大片视频一二区| 精品久久久久99| 国精品人伦一区二区三区蜜桃| 国产精品久久久免费 | 粉嫩虎白女毛片人体| 精品一区二区三区四区五区| 一区二区在线视频播放| 国产成人无码精品| 国产一区二区三区在线观看免费视频 | 国产精品久久成人免费观看| 性xxxxfreexxxxx欧美丶| 欧美一级精品大片| 国产又粗又猛又爽又黄的视频小说| 亚洲欧洲一区| 痴汉一区二区三区| 黄色免费在线看| 91久久人澡人人添人人爽欧美| 中国xxxx性xxxx产国| 亚洲欧美在线专区| 国产精品视频资源| 激情福利在线| 欧美视频不卡中文| 国产麻豆剧传媒精品国产av| 欧美一区二区| 91精品在线播放| 免费大片在线观看www| 欧洲在线/亚洲| 人人人妻人人澡人人爽欧美一区| 国产欧美日本| 九9re精品视频在线观看re6 | 日韩免费在线观看视频| 五月天婷婷社区| 午夜欧美视频在线观看| 亚洲一二三四五| 国产伊人精品| 国产精品美女久久久久av福利| 天堂av最新在线| 日韩欧美高清一区| 久久久久免费看| 成人免费视频一区二区| 国产免费一区二区视频| 北条麻妃在线一区二区免费播放 | 中文字幕在线观看一区二区三区| 日本精品另类| 久久久999精品| 国产裸体无遮挡| 亚洲精品ww久久久久久p站| 黄色三级视频在线播放| 中文字幕午夜精品一区二区三区| 亚洲一区免费网站| 色呦呦在线资源| 日韩电影中文字幕一区| 国产精品久久久久久久久久精爆| 2欧美一区二区三区在线观看视频| 六月丁香婷婷激情| 国产suv精品一区| 欧美激情乱人伦| 性xxxx视频播放免费| 欧美日韩在线视频一区二区| 91中文字幕永久在线| 蜜臀久久久久久久| avove在线观看| 精品国产影院| 国产成人av网| 国产视频在线播放| 亚洲成人精品久久久| 国产成人综合欧美精品久久| 国产午夜精品在线观看| 99re6在线观看| 伊人蜜桃色噜噜激情综合| 久久精品五月婷婷| 国产精品伊人| 久久久久久久久久久亚洲| 日本亚洲一区| 555www色欧美视频| 日韩三级视频在线| 中文字幕免费一区| 亚洲av午夜精品一区二区三区| 亚洲欧美日韩国产一区二区| 亚洲人成网站在线观看播放| 一区二区三区免费在线看| 欧洲s码亚洲m码精品一区| 在线免费av网站| 亚洲福利影片在线| 一道本无吗一区| 亚洲r级在线视频| 成年人免费视频播放| av中文一区二区三区| 99re精彩视频| 国产亚洲永久域名| 欧美性受xxxx黑人猛交88| 日韩a级大片| 亚洲自拍av在线| 精品欧美一区二区三区在线观看| 欧美www在线| 第三区美女视频在线| 欧美精品一区二区三| 亚洲天堂网在线观看视频| 大桥未久av一区二区三区| 亚洲一级二级片| 国产亚洲欧美在线| 精品一区二区视频在线观看| 精品在线免费观看| 欧在线一二三四区| 99精品热6080yy久久| 9l视频自拍9l视频自拍| av一区二区在线观看| 国内精品久久国产| 日韩三级网址| 成人美女av在线直播| 激情开心成人网| 91高清视频免费观看| 久久久123| 欧美成人精品一区二区三区| 一本一道波多野毛片中文在线| 国产丝袜一区二区| 免费看黄网站在线观看| 日韩午夜电影av| 一二三四区在线| 欧美在线观看一区| www.久久久久久久| 狠狠躁天天躁日日躁欧美| 日本五十路女优| 亚洲高清免费视频| 欧美三级在线免费观看| 亚洲色大成网站www久久九九| 亚洲精品成人av久久| 久久久蜜桃精品| 91久久免费视频| 久久九九全国免费| 国产高清自拍视频| 91蜜桃网址入口| 添女人荫蒂视频| 久久影院视频免费| 国产又爽又黄无码无遮挡在线观看| 成人91在线观看| 少妇饥渴放荡91麻豆| 91丝袜呻吟高潮美腿白嫩在线观看| av在线播放网址| 99re热这里只有精品视频| 自拍视频一区二区| 91免费视频大全| av手机在线播放| 国产精品天干天干在线综合| 长河落日免费高清观看| 国产精品久久久久久福利一牛影视| 日本黄区免费视频观看| 中文字幕一区免费在线观看| 朝桐光av在线| 亚洲国产日韩av| 国产精品久久久久久久久久久久久久久久久 | 精品国产一区二区三区在线| 一二三区不卡| 日韩精品在线中文字幕| 激情综合自拍| 国产美女三级视频| 美女性感视频久久| 99精品视频免费版的特色功能| 国产福利一区二区三区视频在线| 无码人妻丰满熟妇啪啪网站| 2023国产精品自拍| 丁香花五月婷婷| 亚洲乱码国产乱码精品精的特点 | 在线午夜影院| 久久久久久久香蕉网| 中文在线中文资源| 国产精品一区二区在线| 精品一区二区三区四区五区| 国产在线一区二区三区四区| 狠狠做六月爱婷婷综合aⅴ | 在线小视频你懂的| 亚洲视频香蕉人妖| 日韩欧美性视频| 欧美性高清videossexo| 精品人妻一区二区三区换脸明星| 日韩av中文在线| 欧美jizzhd欧美| 97在线视频免费| 色综合久久久| 久久er99热精品一区二区三区 | 福利视频一区二区三区四区| 午夜影院日韩| 亚洲自拍第三页| 国产午夜精品久久| 毛片a片免费观看| 在线视频国内自拍亚洲视频| 国产成人精品免费看视频| 亚洲欧洲国产伦综合| 亚洲色图美国十次| 国产精品视频永久免费播放 | 蜜臀久久久99精品久久久久久| 欧美人与性动交α欧美精品| 久久久综合精品| 九九热精品免费视频| 在线观看免费视频综合| 黄色一级a毛片| 精品国产区一区二区三区在线观看| 51av在线| 97在线资源站| 日韩成人a**站| 青青青在线播放| 成人av网站在线观看| 欧美手机在线观看| 欧美综合一区二区三区| 四虎精品成人免费网站| 欧美成人剧情片在线观看| 精品欧美日韩精品| 国产精品一级久久久| 婷婷综合亚洲| 538任你躁在线精品免费| 久久综合久久99| 国产成人无码精品久在线观看 | 毛片免费在线| 高清欧美电影在线| 欧美a级大片在线| 伊人狠狠色丁香综合尤物| 日日夜夜精品视频天天综合网| 第四色在线视频| 亚洲一区二区三区在线看| 国产精品伊人久久| 日韩在线高清视频| 久久er热在这里只有精品66| 日本高清不卡一区二区三| 亚洲在线播放| 特级西西人体wwwww| 亚洲成av人影院| 亚洲毛片在线播放| 欧美高跟鞋交xxxxxhd| 久久av网站| 午夜啪啪福利视频| 国产一区二区剧情av在线| 国产黄色录像片| 欧美高清视频不卡网| yourporn在线观看视频| 国产精品黄视频| 色小子综合网| 亚洲一二区在线观看| 亚洲黄色小说网站| а√中文在线资源库| 欧美日本国产在线| 99re8这里有精品热视频免费| 久久久久久久久久伊人| 国产精品99久久不卡二区| 久久精品www人人爽人人| 亚洲国产天堂久久国产91| 成人一级福利| 欧美一区1区三区3区公司| 日本欧美一区二区三区| 蜜桃av免费在线观看| 91精品在线免费观看| 天堂8中文在线| 久久影院理伦片| 免费视频一区二区| 91精品国产闺蜜国产在线闺蜜| 欧美一二三四在线| av中文资源在线资源免费观看| 精品日产一区2区三区黄免费| 玖玖在线精品| 三级黄色在线观看| 日韩你懂的电影在线观看| 久热在线观看视频| 日韩欧美精品一区二区三区经典| 久久精品国产精品青草| 极品久久久久久| 亚洲国产精品va| 久久久人成影片一区二区三区在哪下载| 亚洲精品一品区二品区三品区| 国产主播一区二区三区| 国产一级中文字幕| 亚洲色图25p| 久久久久久久久久久久电影| 日韩欧美不卡在线| 欧美国产激情一区二区三区蜜月| 国产视频手机在线观看| 5278欧美一区二区三区| 欧美h版在线| www.超碰97| 欧美一区二区三区视频免费| 日韩激情电影| 日韩中文在线字幕| 91蜜桃视频在线| 国产婷婷在线视频| 亲子乱一区二区三区电影| 五月天久久久| 91精品人妻一区二区三区| 日韩一区二区三区在线| 成人影院av| 国风产精品一区二区| 久久久一区二区三区| 精品国产999久久久免费| 午夜精品在线观看| 久久久久久美女精品 |