欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

SpringBoot外化配置源碼的參數(shù)及配置是怎樣的

SpringBoot外化配置源碼的參數(shù)及配置是怎樣的,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)是專業(yè)的平輿網(wǎng)站建設(shè)公司,平輿接單;提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行平輿網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

綜合實戰(zhàn)

我們講解了關(guān)于 Spring Boot 外化配置的原理及源碼分析,我們將通過一個具體的例子來簡單演示在 Spring Boot  中如何使用不同類型的參數(shù)及配置。我們會用到命令行傳遞參數(shù)、默認(rèn)配置文件 application.properties 及基于profile 配置參數(shù)、@Value  注解獲取參數(shù)、 基于類型安全的@ConfigurationProperties 注解關(guān)聯(lián) Bean 等功能。

由于 Spring Boot 已經(jīng)對外化配置進(jìn)行了簡化處理,我們在實踐中使用起來是非常方便的。這里我創(chuàng)建了一個標(biāo)準(zhǔn)的  Spring Boot 項目,版本采用2.2.1.RELEASE。首先我們看一下項目的目錄結(jié)構(gòu)。

SpringBoot外化配置源碼的參數(shù)及配置是怎樣的

在 pom.xml 中引入的核心依賴為 spring-boot-starter-web,對應(yīng)依賴源碼如下。

<dependency> <groupId>org. springframework . boot</ groupId> <artifactId>spring- boot- starter-web</artifactId> </ dependency>

SpringbootConfigApplication 類為 Spring Boot 項目的啟動類,我們不再做過多介紹。

ConfigController類為接收請求的 Controller, 在 其內(nèi)部定義了 一 個 默 認(rèn) 的getConfigParams  方法,在該方法內(nèi)打印了不同途徑獲得的參數(shù)值,相關(guān)源碼如下。

@RestController public class ConfigController { @Value( "${user . username}") private String username ; @Value("${user . password}") private String password; @Resource private LoginUserConfig loginUserConfig; @Value("${projectName :unknown}") private String projectName ; @RequestMapping("/") public String getConfigParams() { //啟動命令傳遞參數(shù) System. out . println("Command config projectName:" + projectName);//通過 appl ication 配置文件配置的參數(shù) System. out . println("Application config Username System. out . println("Application config Password :”+ password); //通過@ConfigurationProperties 注解配置的參數(shù) System. out. println("ConfigurationProperties config Username :”+ login UserConfig. getUsername()); System . out . println("Configurat ionProperties config Password :”+ login UserConfig. getPassword()); return ""; }

其中通過@RestController 注解指定該類為可接收請求的 Controller,并進(jìn)行實例化。在該類內(nèi)部分 別通過@Value  注解、@Resource 注解來 獲取不同途徑 設(shè)置的參數(shù)。 通過getConfigParams 方法對外提供訪問請求,  當(dāng)前接收到請求之后會打印不同途徑獲得參數(shù)的值。

首先我們來看通過@Value 獲取到的值的來源,在該實例中有兩個途徑來設(shè)置對應(yīng)的值:

application.properties 配置文件和命令行參數(shù)。

關(guān)于命令行參數(shù),我們之前也已經(jīng)提到過,基本傳遞方式就是在執(zhí)行啟動項目的命令時通過“一 name=value'  的形式進(jìn)行傳遞。結(jié)合并實例,傳遞方式如下。

java -jar springboot-config-0. 0.1- SNAPSHOT. jar -- projectName=SpringBoot

在 ConfigController 類中,我們可以看到@Value  的使用基本格式為@Value("${param}"),但針對命令行參數(shù)獲取時我們采用了@Value("${param:default}")方式。在實踐中這兩種方式都比較常用,而第二種通過冒號分隔符進(jìn)行傳遞默認(rèn)值,當(dāng)  param 參數(shù)不存在或未在application 中配置時,會使用指定的默認(rèn)值。

以當(dāng)前實例為例,如果啟動命令中未指定 projectName 參數(shù),同時@Value  獲取時也未指定默認(rèn)值"unknown",那么在執(zhí)行啟動命令時便會拋出異常無法啟動。這是我們在使用@Value的過程中需要注意的一種情況。

關(guān)于 application.properties 配置文件中參數(shù)的設(shè)置更簡單,直接在對應(yīng)文件中設(shè)置對應(yīng)的key=value 值即可,比如本例中  application.properties 中的配置源碼如下。

#公共配置,任何環(huán)境啟動均采用 8080 端 server. port=8080 spring. profiles . active=dev

但在實踐的過程中,我們經(jīng)常會遇到不同環(huán)境需要不同配置文件的情況,如果每換一-個環(huán)境就重新修改配置文件或重新打包一次會比較麻煩,這時就可以用 Spring  Boot 提供的Profile 配置功能來解決問題了。而我們實例中提供的 3 個 properties 配置文件就是為了展示 Profile  配置的基本使用。

通常情況下,項目中根據(jù)環(huán)境的多少會創(chuàng)建 1 個到多個 properties 配置文件,一般情況下它們對應(yīng)的命名格式和相關(guān)功能如下。

  • *applcation.properties:公共配置。

  • *application-dev.properties:開發(fā)環(huán)境配置。

  • .application-test.properties:測試環(huán)境配置。

  • application-prod.properties:生產(chǎn)環(huán)境配置。

當(dāng)然,命名中的“dev'"test 和"prod”是可以自定義的,而這些配置在什么時候會被使用,則可通過激活 application.properties  配置文件中的 spring.profiles. active 參數(shù)來控制。

比如,在 applcation.properties 中進(jìn)行公共配置, 然后通過如下配置激活指定環(huán)境的配置。

spring. profiles.active = prod

其中“prod”對照文件名中 application-prod.properties。Spring Boot 在處理時會獲取配置文件  applcation.properties, 然 后 通 過 指 定 的 profile 的 值 “prod" 進(jìn) 行 拼 接 , 獲  得application-prod.properties 文件的名稱和路徑。 具體加載拼接的步驟和原理,我們在前面的章節(jié)中已經(jīng)講過,可對照實例回顧一下。

在上述實例中,我們激活了 dev 的配置環(huán)境,application-dev.properties 中的配置如下。

#測試環(huán)境用戶名和賬戶 user. username=test - admin user. password=test-pwd

此時,通過訪問對應(yīng)的請求,getConfigParams 方 法中對應(yīng)打印的日志如下。

Application config Username : test- admin Application config Password : test - pwd

如果想激活生產(chǎn)環(huán)境的配置,只須在 application.properties 中配置spring.profiles. active=prod  即可。

@Value 參數(shù)值的獲取和基于 Profile 的參數(shù)配置我們就拓展這么多,@Value  的使用還包括注入普通字符串、操作系統(tǒng)屬性、表達(dá)式結(jié)果、文件資源、URL 資源等內(nèi)容,大家可查閱官方文檔和相關(guān)實例進(jìn)一步學(xué)習(xí)。

在上述@Value 使用中,我們可以對單個屬性進(jìn)行注入配置,但如果有很多配置屬性或者配置屬性本身擁有層級結(jié)構(gòu),便顯得不夠方便靈活。因此,Spring  Boo 提供了基于類型安全的配置方式。

在 ConfigController 中我們通過@Resource 注入了一個 LoginUserConfig  類,該類便是通過@ConfigurationProperties 注解將 properties 屬性和 LoginUserConfig  的屬性進(jìn)行關(guān)聯(lián),從而實現(xiàn)類型安全配置。LoginUserConfig 的源碼如下。

@Component@Configurat ionProperties(prefix = "user") public class LoginUserConfig { private String username ; private String password; //省略 getter/setter 方法 }

在 LoginUserConfig 類的源代碼中,通過@ConfigurationProperties 注解指定在實例化時將前綴為 user  的配置屬性綁定到 LoginUserConfig 類的對應(yīng)屬性上,而通過@Component將該類實例化。

這 里 由 于 指 定 配 置 文 件 為 dev , 則 會 將 上 述 dev 配 置 文 件 中 的 user.username  和user.password 的值分別綁定到 LoginUserConfig 類的 username 和 password 屬性上。而在  ConfigController 中注入 之后, 便可獲 得對應(yīng)的屬 性值。同樣在 執(zhí)行請求時 ,getConfigParams  方法中對應(yīng)打印的日志如下。

  • ConfigurationProperties config Username : test - admin

  • ConfigurationProperties config Password : test- pwd

上述實例只演示了@ConfigurationProperties 綁定屬性的一種情況,Spring Boot 將 Environment  屬性綁定到@ConfigurationProperties 標(biāo)注的 Bean 時,還可以使用一些寬松的規(guī)則,也就是說 Environment 屬性名和 Bean  屬性名不需要精確匹配。

比如在對象 User 中有一-個 firstName 屬性,那么在配置文件中對應(yīng)如下配置項均會匹配。

  • user. firstName // 標(biāo)準(zhǔn)駝峰命名語法

  • user. first-name // 短橫線隔開表示,推薦用于. properties 和. yml 文件中

  • user. first_ name // 下劃線表示,用于. properties 和 yml 文件的可選格式

  • USER_ FIRST _NAME //大寫形式,推薦用于系統(tǒng)環(huán)境變量

同時,基于類型安全的屬性配置還可以結(jié)合@Validated  注解進(jìn)行屬性的約束校驗,比如判斷是否非空、是否是正確的手機(jī)號(郵箱)格式、是否是正確的日期等,這里就不進(jìn)行展開了。

大家可以結(jié)合本實例嘗試拓展。

最后,我們再整體回顧一-下本節(jié)實例的重 點內(nèi)容,首先基于 Profile 機(jī)制我們設(shè)定了多個環(huán)境的配置文件;然后通過 spring. profiles.  active 配置指定具體使用哪些環(huán)境的參數(shù)值;接著通過@Value 和@ConfigurationProperties 注解將這些配置屬性綁定到類屬性或  Bean 對象上;最后在具體的場景中獲取并使用(本實例為打印)。

在具體實踐中我們還會遇到優(yōu)先級的問題,比如某些參數(shù)直接通過命令行參數(shù)進(jìn)行指定,那么它將覆蓋同名的配置文件中的參數(shù)。再比如,如果將 application  配置文件放置在項目同級目錄下,它的優(yōu)先級高于 jar 包內(nèi)的配置等。這些內(nèi)容我們在原理篇都有涉及,讀者可參考本實例進(jìn)行逐一驗證學(xué)習(xí)。

主要介紹了 Spring Boot 中參數(shù)的傳遞過程和配置文件的加載,特別是基于 profile  的加載機(jī)制。而關(guān)于加載、默認(rèn)配置、配置優(yōu)先級等操作,都位于  ConfigFileApplicationListener類中,該類還是值得讀者朋友花時間研究一下的。

最后,由于本章涉及源碼較多,邏輯層次較深,不同的配置模式又會形成不同的組合,形成較多的場景,因此建議在學(xué)習(xí)過程中通過 debug  來跟蹤每一步的操作,以便能夠更好地理解整個流程。

關(guān)于SpringBoot外化配置源碼的參數(shù)及配置是怎樣的問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

網(wǎng)頁標(biāo)題:SpringBoot外化配置源碼的參數(shù)及配置是怎樣的
鏈接地址:http://www.chinadenli.net/article28/iigecp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈品牌網(wǎng)站設(shè)計軟件開發(fā)標(biāo)簽優(yōu)化手機(jī)網(wǎng)站建設(shè)企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管