溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Spring Boot Profiles的原理和作用是什么

發(fā)布時(shí)間:2021-07-08 17:47:21 來(lái)源:億速云 閱讀:443 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“Spring Boot Profiles的原理和作用是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Spring Boot Profiles的原理和作用是什么”吧!

Spring Boot Profiles 簡(jiǎn)介

Profile 的概念其實(shí)很早在 Spring Framework 就有了,在 Spring Framework 3.1 版本引入了注解 @ProfileEnvironment 環(huán)境配置的抽象,只是在 Spring Boot 框架里再進(jìn)一步將 Profiles 功能進(jìn)行擴(kuò)展,使它也成為了 Spring Boot 特性之一,為此單獨(dú)在 官方文檔 25. Profiles 一節(jié)里介紹,文檔里把 Spring Boot Profiles 也叫做 Spring Profiles。

那么什么又是 Spring Profiles,為什么需要它呢?我們先來(lái)看一個(gè)熟悉的場(chǎng)景:我們平常項(xiàng)目開(kāi)發(fā),經(jīng)常需要根據(jù)不同的環(huán)境進(jìn)行配置的修改,比如在本地開(kāi)發(fā)會(huì)加載本機(jī)的配置和開(kāi)發(fā)環(huán)境數(shù)據(jù)庫(kù),在測(cè)試服務(wù)器上部署時(shí)就需要加載測(cè)試環(huán)境配置和數(shù)據(jù)庫(kù),同樣地,當(dāng)項(xiàng)目發(fā)布生產(chǎn)環(huán)境時(shí)就需要設(shè)置為生產(chǎn)環(huán)境配置和數(shù)據(jù)庫(kù)。這樣一來(lái),不同的環(huán)境部署都需要額外的處理來(lái)調(diào)整環(huán)境的配置,維護(hù)起來(lái)十分繁瑣,還容易出錯(cuò)。

為了解決不同環(huán)境需要的配置切換問(wèn)題,Spring Profiles 提供了一種方式允許我們指定在特定環(huán)境下只加載對(duì)應(yīng)的程序配置,每一種環(huán)境配置對(duì)應(yīng)一個(gè) Profile,只有當(dāng)前 Profile 處于激活狀態(tài)時(shí),才會(huì)將該 Profile 所對(duì)應(yīng)的配置和 Bean 加載到 Spring 程序中。

Spring Profiles 就是針對(duì)應(yīng)用程序,不同環(huán)境需要不同配置加載的一種解決方案。

當(dāng)然 Spring 允許多個(gè) Profile 處于激活狀態(tài),比如將應(yīng)用配置進(jìn)行細(xì)分成數(shù)據(jù)庫(kù)配置,消息中間件配置,緩存配置等,都為各自在不同環(huán)境定義不同的 Profile 名稱(chēng),在需要激活環(huán)境對(duì)應(yīng)配置時(shí),指定多個(gè) Profile。

Spring Profiles 實(shí)戰(zhàn)

在 Spring 程序中有兩種方式使用 Profiles:XML 配置和注解 @Profile

XML 配置定義 Profile

雖然現(xiàn)在 XML 配置方式使用越來(lái)越少,還是簡(jiǎn)單介紹下,通常我們?cè)?XML 文件定義的 Bean 時(shí)都有根元素 <beans>,在 beans 元素上多了一個(gè)屬性 profile 可以指定環(huán)境,比如說(shuō)把開(kāi)發(fā)環(huán)境的 profile 定義為 dev,生產(chǎn)環(huán)境的 profile 為:prod。

Spring Boot Profiles的原理和作用是什么

需要注意的是:必須要使用 Spring XML Beans Schema 版本為 4.0 以上才支持 profile 屬性。在 XML 文件定義之后我們只需要激活指定的 Profile 名稱(chēng)就可以加載對(duì)應(yīng)的 Bean 對(duì)象了,在 Spring 程序中激活的方式主要兩種:

  • Java API 方式,獲取當(dāng)前 Spring 容器的環(huán)境 Bean,設(shè)置 activeProfiles 屬性,然后啟動(dòng)容器

    Spring Boot Profiles的原理和作用是什么

  • 采用啟動(dòng)參數(shù)方式指定,固定格式:-Dspring.profiles.active=dev

注解 @Profiles 定義Profile

使用注解定義 Profile 也比較簡(jiǎn)單,引入一個(gè)新的注解 @Profiles,通常 @Profiles 配合 @Component 或者 @Configuration 使用,如下示例:

Spring Boot Profiles的原理和作用是什么

激活 Profile 的方式都是一樣的,只要指定 Profile 被激活,其對(duì)應(yīng)的 Bean 才會(huì)加載。在 Spring 程序中 Profile 默認(rèn)為 default,當(dāng)前我們可以通過(guò) spring.profiles.default 配置方式或者 org.springframework.core.env.AbstractEnvironment#setDefaultProfiles API 方式修改。

Spring Boot Profile 實(shí)戰(zhàn)

好了,現(xiàn)在我們?cè)賮?lái)看下在 Spring Boot 程序中如何使用 Profile。通常一個(gè) Spring Boot 程序的配置文件為 yml 或者 properties 格式,由于 yml 格式文件的結(jié)構(gòu)簡(jiǎn)潔已讀,備受官方推崇,我們可以看下如何在 application.yml 定義 Profile 和對(duì)應(yīng)的配置。

Spring Boot Profiles的原理和作用是什么

與yml格式文件不同,正對(duì)不同的 Profile,無(wú)法在一個(gè) properties 文件設(shè)置,官方采用命名形式為 applications-${profile}.properties 格式來(lái)達(dá)成一樣的效果。為了看到指定 Profile 激活后的效果,我們可以通過(guò)下方的一個(gè)例子實(shí)踐下,通過(guò)激活不同 Profile 啟動(dòng)程序,來(lái)請(qǐng)求 /enviroment 接口來(lái)獲取當(dāng)前的環(huán)境配置變量。

Spring Boot Profiles的原理和作用是什么

這里我們介紹如何在配置文件中激活 Profile 的方式:在 application.yml 頂部添加如下配置,表明當(dāng)前所激活的 Profile 為 prod,當(dāng)然也可以前文介紹的啟動(dòng)參數(shù)方式激活:

Spring Boot Profiles的原理和作用是什么

然后啟動(dòng)程序,curl 方式訪問(wèn) http://localhost:9000/enviroment 可以得到如下輸出結(jié)果:

Spring Boot Profiles的原理和作用是什么

同樣如果上述的 active 屬性值指定為 dev,將輸出內(nèi)容: current app enviroment is prod。

Spring Boot API 方式激活 Profile

在 Spring Boot 程序除了上述的方法來(lái)激活 Profile 外,還可以使用 Spring Boot API 方式激活:

  • SpringApplication.setAdditionalProfiles(…)

    Spring Boot Profiles的原理和作用是什么

  • SpringApplicationBuilder.profiles(...)

    Spring Boot Profiles的原理和作用是什么

但需要注意的是使用 Spring Boot API 的話需要在程序啟動(dòng)前設(shè)置,也就是 SpringApplication.run(...) 方法執(zhí)行前,否則沒(méi)有效果。 采用 Spring Boot API 方式添加的Profile 是屬于額外激活的 Profile,也就是說(shuō)覆蓋掉外部傳入的 spring.profiles.activie 指定的 Profile。

總結(jié)

在Spring Boot 程序中,我們通常定義不同 Profiles 的配置文件,如 application-{profile}.properties,在默認(rèn)配置文件 application.properties 中設(shè)置 spring.profiles.active=dev ,用于平常開(kāi)發(fā)使用,當(dāng)需要打包上傳服務(wù)器時(shí),通過(guò)啟動(dòng)參數(shù)方式 jar -Dspring.profiles.active=prod xxx.jar 指定對(duì)應(yīng)環(huán)境的 Profile 啟動(dòng)程序來(lái)加載對(duì)應(yīng)環(huán)境的配置,到這里我們學(xué)習(xí)如何通過(guò) Spring Boot Profiles 特性來(lái)應(yīng)對(duì)程序中不同環(huán)境配置的切換,希望對(duì)工作中的小伙伴有所幫助,也歡迎小伙伴留言分享應(yīng)對(duì)項(xiàng)目環(huán)境配置區(qū)分加載的實(shí)踐心得。若有錯(cuò)誤或者不當(dāng)之處,還請(qǐng)大家批評(píng)指正,一起學(xué)習(xí)交流。

示例代碼

本文示例代碼可以通過(guò)下面?zhèn)}庫(kù)地址獲?。?/p>

  • springboot-actions-profiles:https://github.com/wrcj12138aaa/springboot-actions-profiles

環(huán)境支持:

  • JDK 8

  • SpringBoot 2.1.6

  • Maven 3.6.0

到此,相信大家對(duì)“Spring Boot Profiles的原理和作用是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI