欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot?Profiles?多環(huán)境配置及切換

 更新時(shí)間:2021年12月08日 09:27:25   作者:萌貓他爸  
大部分情況下,我們開發(fā)的產(chǎn)品應(yīng)用都會(huì)根據(jù)不同的目的,所以需要支持不同的環(huán)境,本文主要介紹了SpringBoot?Profiles?多環(huán)境配置及切換,感興趣的可以了解一下

前言

大部分情況下,我們開發(fā)的產(chǎn)品應(yīng)用都會(huì)根據(jù)不同的目的,支持運(yùn)行在不同的環(huán)境(Profile)下,比如:

  • 開發(fā)環(huán)境(dev)
  • 測(cè)試環(huán)境(test)
  • 預(yù)覽環(huán)境(pre)
  • 生產(chǎn)環(huán)境(prod)

這里的 環(huán)境 實(shí)際上是一個(gè)統(tǒng)稱,不同的環(huán)境可能代表著

  • 使用的域名、端口、實(shí)例數(shù)目是不同的;
  • 連接的數(shù)據(jù)庫地址、端口、名稱是不同的;
  • 使用的日志輸出格式、級(jí)別、保存時(shí)間是不同的;

以數(shù)據(jù)庫為例,應(yīng)用在開發(fā)環(huán)境下運(yùn)行時(shí),連接的是開發(fā)環(huán)境對(duì)應(yīng)的數(shù)據(jù)庫;應(yīng)用在生產(chǎn)環(huán)境下運(yùn)行時(shí),連接的是生產(chǎn)環(huán)境對(duì)應(yīng)的數(shù)據(jù)庫。

我們不是要為不同的運(yùn)行環(huán)境開發(fā)多個(gè)不同的應(yīng)用,而是要使應(yīng)用可以運(yùn)行在多個(gè)不同的環(huán)境中,怎么做到?

通過配置,更準(zhǔn)備地說,是通過配置屬性。配置屬性本質(zhì)就是鍵值對(duì)。

以數(shù)據(jù)庫為例,應(yīng)用連接數(shù)據(jù)庫時(shí),需要提供如下連接信息:

  • 地址
  • 端口
  • 名稱
  • 用戶名
  • 密碼

這些信息不會(huì) 硬編碼 到應(yīng)用代碼中,而是以配置屬性(鍵值對(duì))的形式存儲(chǔ)到配置文件中;應(yīng)用運(yùn)行時(shí)通過讀取該配置文件中的配置屬性,進(jìn)而完成數(shù)據(jù)庫的連接。

應(yīng)用 = 程序代碼 + 配置文件

這個(gè)配置文件中連接信息指向測(cè)試使用的數(shù)據(jù)庫,我們就說應(yīng)用運(yùn)行在測(cè)試環(huán)境;連接信息指向生產(chǎn)使用的數(shù)據(jù)庫,我們就說應(yīng)用運(yùn)行在生產(chǎn)環(huán)境;應(yīng)用需要使用的其它服務(wù)(如:Redis、Kafka等)也是同樣的原理。

也說是說,我們可以通過為應(yīng)用運(yùn)行時(shí)指定不同的配置文件(不同的配置文件配置著不同的配置屬性),就可以使得應(yīng)用可以運(yùn)行在不同的環(huán)境中。SpringBoot 實(shí)際上也是通過類似的原理實(shí)現(xiàn)多環(huán)境的配置及切換的。

注:配置屬性可能有多種存儲(chǔ)方式,這里僅以配置文件為例。

默認(rèn)環(huán)境配置

多環(huán)境配置及切換并不是每個(gè)應(yīng)用所必須的,SpringBoot 也為我們考慮到了這一點(diǎn),它提供了默認(rèn)的配置文件和運(yùn)行環(huán)境,即:如果沒有特別指定,SpringBoot 使用默認(rèn)的配置文件,運(yùn)行于默認(rèn)環(huán)境中。

默認(rèn)配置文件

SpringBoot 默認(rèn)配置文件:application.yml,默認(rèn)位于類路徑下。其中,application 代表 SpringBoot 配置文件名稱,yml 代表配置文件格式(后綴)。

默認(rèn)配置文件實(shí)際也可以不提供,或者內(nèi)容為空。這是為什么呢?

SpringBoot 是一個(gè)功能十分豐富的技術(shù)框架,自身內(nèi)置了很多的配置屬性,用以控制 Spring 容器的初始化行為;同時(shí),SpringBoot 也支持通過外置配置文件的方式引入其它的配置屬性,application.yml 就是會(huì)被 SpringBoot 默認(rèn)加載的外置配置文件之一。

SpringBoot 配置屬性 = 內(nèi)置配置屬性 + 外置配置文件屬性(application.yml)

如果 application.yml 不存在或者內(nèi)容為空,SpringBoot 僅使用內(nèi)置配置屬性初始化容器環(huán)境;如果 application.yml 存在且內(nèi)容不為空,SpringBoot 使用內(nèi)置配置屬性和 application.yml 配置屬性的合集初始化容器環(huán)境。

如果 application.yml 中的配置屬性名稱和內(nèi)置屬性相同,那么這個(gè)配置屬性值最終以 application.yml 中的配置值為準(zhǔn)(覆蓋)。相當(dāng)于,application.yml 的配置文件屬性優(yōu)先級(jí)高于默認(rèn)的內(nèi)置屬性。

注:SpringBoot 也支持 properties 后綴的配置文件格式,本文以 yml 為例。

默認(rèn)運(yùn)行環(huán)境

SpringBoot 默認(rèn)運(yùn)行環(huán)境:default,default 為運(yùn)行環(huán)境名稱。

默認(rèn)運(yùn)行環(huán)境的名稱是哪里來的呢?

如前文所述,SpringBoot 是有內(nèi)置屬性的,默認(rèn)的運(yùn)行環(huán)境名稱即來自于內(nèi)置屬性:

spring.profiles.active=default

也就是說,內(nèi)置配置屬性 spring.profiles.active 指定 SpringBoot 的運(yùn)行環(huán)境名稱為 default,我們可以將其指定為其它值,進(jìn)行改變運(yùn)行環(huán)境名稱。

多環(huán)境配置

因?yàn)?application.yml 配置屬性的優(yōu)先級(jí)高于默認(rèn)的內(nèi)置屬性,我們可以通過在 application.yml 中指定配置屬性 spring.profiles.active 的值為 dev,將 SpringBoot 運(yùn)行環(huán)境的名稱修改為 dev:

application.yml

spring:
  profiles:
    active: dev

僅僅是修改運(yùn)行環(huán)境名稱么?SpringBoot 幫我們做的還有更多,它會(huì)自動(dòng)搜索名稱為 application-dev.yml 的配置文件并加載其中的配置屬性。

配置文件名稱是有固定模式的:

application-{profile}.yml

其中,{profile} 為我們通過配置屬性 spring.profiles.active 指定的運(yùn)行環(huán)境名稱。

也就是說,如果我們指定運(yùn)行環(huán)境名稱為 dev,SpringBoot 會(huì)為我們自動(dòng)搜索加載配置文件名稱為 application-dev.yml 中的配置屬性;如果我們指定運(yùn)行環(huán)境名稱為 test,SpringBoot 會(huì)為我們自動(dòng)搜索加載配置文件名稱為 application-test.yml 中的配置屬性;其它運(yùn)行環(huán)境名稱同理。

SpringBoot 配置屬性 = 內(nèi)置屬性 + application.yml 配置屬性 + application-{profile}.yml 配置屬性

SpringBoot 配置屬性優(yōu)先級(jí):application-{profile}.yml 配置屬性 > application.yml 配置屬性 > 內(nèi)置屬性

也就是說,我們可以通過指定不同的運(yùn)行環(huán)境名稱,以及相應(yīng)名稱的配置文件,從而實(shí)現(xiàn)多環(huán)境之間的切換。

注:如果找不到相應(yīng)環(huán)境(profile)的配置文件,則會(huì)忽略。

多環(huán)境切換

以開發(fā)環(huán)境(dev)、測(cè)試環(huán)境(test)、預(yù)覽環(huán)境(pre)、生產(chǎn)環(huán)境(prod)為例,我們可以預(yù)先在項(xiàng)目中創(chuàng)建相應(yīng)環(huán)境的配置文件:

application-dev.yml
application-test.yml
application-pre.yml
application-prod.yml

每一個(gè)環(huán)境的配置文件中配置相應(yīng)環(huán)境對(duì)應(yīng)的屬性,如:數(shù)據(jù)庫連接信息等;然后在 application.yml 中通過指定配置屬性 spring.profiles.active 為不同的值實(shí)現(xiàn)多環(huán)境切換,如:

spring:
  profiles:
    active: prod

代表 SpringBoot 的運(yùn)行環(huán)境名稱為 prod,它將會(huì)加載 application-prod.yml 中的配置屬性。

還可以在 SpringBoot 啟動(dòng)時(shí),通過命令行參數(shù)的方式指定配置屬性:

java -jar myproject.jar --spring.profiles.active=prod

SpringBoot 配置屬性優(yōu)先級(jí):命令行參數(shù)配置屬性 > application-{profile}.yml 配置屬性 > application.yml 配置屬性 > 內(nèi)置屬性

推薦的方式是通過 application.yml/spring.profiles.active 指定 SpringBoot 應(yīng)用默認(rèn)的運(yùn)行環(huán)境,應(yīng)用啟動(dòng)時(shí)通過命令行參數(shù)指定具體的運(yùn)行環(huán)境;如果啟用啟動(dòng)時(shí)沒有指定,則應(yīng)用使用默認(rèn)的運(yùn)行環(huán)境運(yùn)行。

小結(jié)

SpringBoot 多環(huán)境配置及切換,本質(zhì)就是通過預(yù)先設(shè)定好多個(gè)運(yùn)行環(huán)境名稱及相應(yīng)的配置文件;應(yīng)用啟動(dòng)時(shí)通過指定運(yùn)行環(huán)境名稱,進(jìn)而加載對(duì)應(yīng)名稱的配置文件實(shí)現(xiàn)的。

實(shí)際使用時(shí),我們還可以充分利用配置屬性加載的優(yōu)先級(jí)合理地規(guī)劃應(yīng)用的配置屬性,比如:

  • 通用配置(與運(yùn)行環(huán)境無關(guān)的)屬性可以放到 application.yml 中;
  • 運(yùn)行環(huán)境(profile)相關(guān)的配置屬性可以放到相應(yīng)的 application-{profile}.yml 中;
  • 啟動(dòng)時(shí)需要臨時(shí)指定的配置屬性可以通過命令行參數(shù)設(shè)置;
  • 2 和 3 中配置屬性也可以放到 application.yml 中一份,作為默認(rèn)配置。

到此這篇關(guān)于SpringBoot Profiles 多環(huán)境配置及切換的文章就介紹到這了,更多相關(guān)SpringBoot Profiles 多環(huán)境內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)用Mysql存取圖片操作實(shí)例

    Java實(shí)現(xiàn)用Mysql存取圖片操作實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)用Mysql存取圖片操作實(shí)例,本文講解了使用BLOB類型保存和讀取圖片的代碼實(shí)例,需要的朋友可以參考下
    2015-06-06
  • SpringBoot + 微信公眾號(hào)JSAPI支付功能的實(shí)現(xiàn)

    SpringBoot + 微信公眾號(hào)JSAPI支付功能的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot + 微信公眾號(hào)JSAPI支付功能的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 教你安裝eclipse2021并配置內(nèi)網(wǎng)maven中心倉庫的圖文詳解

    教你安裝eclipse2021并配置內(nèi)網(wǎng)maven中心倉庫的圖文詳解

    本文能通過圖文并茂的形式給大家介紹安裝eclipse2021并配置內(nèi)網(wǎng)maven中心倉庫的相關(guān)知識(shí),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-09-09
  • Java創(chuàng)建student類詳細(xì)代碼例子

    Java創(chuàng)建student類詳細(xì)代碼例子

    這篇文章主要給大家介紹了關(guān)于Java創(chuàng)建student類的相關(guān)資料,學(xué)生類(Student)是一種面向?qū)ο蟮木幊谈拍?其主要用于描述學(xué)生的屬性和行為,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Java?Collection?接口和常用方法綜合詳解

    Java?Collection?接口和常用方法綜合詳解

    Collection派生出三個(gè)子接口,Set代表不可重復(fù)的無序集合、List代表可重復(fù)的有序集合、Queue是java提供的隊(duì)列實(shí)現(xiàn),通過它們不斷的擴(kuò)展出很多的集合類,接下來我們?cè)敿?xì)介紹一下
    2021-11-11
  • Java基于fork/koin類實(shí)現(xiàn)并發(fā)排序

    Java基于fork/koin類實(shí)現(xiàn)并發(fā)排序

    這篇文章主要介紹了Java基于fork/koin類實(shí)現(xiàn)并發(fā)排序,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 舉例講解Java的內(nèi)部類與類的加載器

    舉例講解Java的內(nèi)部類與類的加載器

    這篇文章主要介紹了Java的內(nèi)部類與類的加載器,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-03-03
  • Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之?dāng)?shù)組

    Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之?dāng)?shù)組

    數(shù)組是有序的元素序列,若將有限個(gè)類型相同的變量的集合命名,那么這個(gè)名稱為數(shù)組名。組成數(shù)組的各個(gè)變量稱為數(shù)組的分量,也稱為數(shù)組的元素,有時(shí)也稱為下標(biāo)變量。數(shù)組是在程序設(shè)計(jì)中,為了處理方便, 把具有相同類型的若干元素按有序的形式組織起來的一種形式
    2022-02-02
  • Java實(shí)現(xiàn)Fibonacci(斐波那契)取余的示例代碼

    Java實(shí)現(xiàn)Fibonacci(斐波那契)取余的示例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)Fibonacci取余的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 詳解rabbitmq使用springboot實(shí)現(xiàn)fanout模式

    詳解rabbitmq使用springboot實(shí)現(xiàn)fanout模式

    這篇文章主要介紹了rabbitmq使用springboot實(shí)現(xiàn)fanout模式,Fanout特點(diǎn)是發(fā)布與訂閱模式,是一種廣播機(jī)制,它是沒有路由key的模式,需要的朋友可以參考下
    2023-07-07

最新評(píng)論