亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用Spring boot 的profile功能實現(xiàn)多環(huán)境配置自動切換

 更新時間:2018年11月25日 17:36:49   作者:黑少  
這篇文章主要介紹了使用Spring boot 的profile功能實現(xiàn)多環(huán)境配置自動切換的相關知識,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下

通常服務端應用開發(fā)需要經(jīng)過以下幾個流程:

開發(fā) -> 測試 -> RC驗證 -> 上線

這就涉及到四個不同的環(huán)境,開發(fā)環(huán)境、測試環(huán)境、RC環(huán)境以及生產環(huán)境,為了避免不同環(huán)境之間相互干擾,通常需要獨立部署數(shù)據(jù)庫、緩存服務器等,那么應用配置也要做相應的調整。

為了解決不同環(huán)境配置切換問題,很多人的做法是:把配置文件根據(jù)不同的環(huán)境,放到不同的目錄或文件中,打包時通過gradle或maven,通過命令行參數(shù)指定要打哪個環(huán)境的包。這樣就可以針對不同的環(huán)境生成不同的包。但這樣的做法有以下幾個問題:

  • gradle或maven打包腳本文件需要重復編寫“選擇文件”打包的邏輯,增加很多重復勞動的成功;
  • 在jenkins等集成環(huán)境中,需要針對每個應用,不同的環(huán)境做相應的設置;
  • 需要管理不同環(huán)境的包,帶來的成本;
  • 部署時,需要注意包與運行環(huán)境是否一致;
  • 如果運行在docker中時,因為包不同所以要針對不同的環(huán)境,構建相應的鏡像。

這時也許有人會說,把配置都從包里剝離出來,放到配置中心就可以了,但是不同環(huán)境對應的配置中心地址也是不一樣的。

Spring中的Profile 是什么?

Spring中的Profile功能其實早在Spring 3.1的版本就已經(jīng)出來,它可以理解為我們在Spring容器中所定義的Bean的邏輯組名稱,只有當這些Profile被激活的時候,才會將Profile中所對應的Bean注冊到Spring容器中。

舉個更具體的例子,我們以前所定義的Bean,當Spring容器一啟動的時候,就會一股腦的全部加載這些信息完成對Bean的創(chuàng)建;而使用了Profile之后,它會將Bean的定義進行更細粒度的劃分,將這些定義的Bean劃分為幾個不同的組,當Spring容器加載配置信息的時候,首先查找激活的Profile,然后只會去加載被激活的組中所定義的Bean信息,而不被激活的Profile中所定義的Bean定義信息是不會加載用于創(chuàng)建Bean的。

為了使用不同的環(huán)境,我們首先對不同的環(huán)境,定義相應的profile名稱。

比如,開發(fā)環(huán)境的profile為:dev;測試環(huán)境的profile為:test;RC環(huán)境的profile為:rc;生產環(huán)境的profile為:prod。

下面舉個dubbo不同環(huán)境下,使用不同配置的方法:


上面例子中,當激活相應的profile時,相應的配置文件才會導入。

比如:profile為dev時,導入dubbo-dev.properties。

注意:所有spring xml schema的版本必須是4.0以上,比如:http://www.springframework.org/schema/util/spring-util-4.3.xsd。spring 默認profile為default, 在沒有指定profile的,會被默認為default。

如果我們使用配置中心的話,上面的配置還可以更簡單。等配置中心投產后我們再討論。

Spring boot中使用profile切換配置

Spring boot中默認加載的配置文件是:application.properties或application.yml。當激活profile后(后面我們討論如何激活profile),可以通過profile自動選擇加載的application-{profile}.properties或application-{profile}.yml格式的配置文件。

比如:profile為dev時,會加載application.properties或application.yml外,還會加載application-dev.properties或application-dev.yml配置。

另外如果引入Spring cloud 時,也會加載啟動配置bootstrap.properties或bootstrap.yml以及bootstrap-{profile}.properties 或 bootstrap-{profile}.yml。

所以把各個環(huán)境公共的配置寫在application.properties或application.yml中。把不同環(huán)境的配置寫在application-{profile}.properties或application-{profile}.yml中。

@Profile注解的使用

使用java進行配置時,可以通過@Profile注解,實現(xiàn)不同環(huán)境使用配置策略。比如swagger現(xiàn)在使用很普遍了,但是它存在一定的安全問題,如果生產環(huán)境中也暴露swagger的話,風險還是比較大的,建議只在開發(fā)環(huán)境和測試環(huán)境啟用,配置例子如下:


將上面的代碼保存到logback-spring.xml文件中,而不是logback.xml中。

logback中profile的使用

在開發(fā)環(huán)境或測試環(huán)境中,為了方便排查問題,我們會使用DEBUG甚至TRACE級別的日志,而在生產環(huán)境中,避免日志增長過快,盡量只是輸出ERROR級別的日志。這就需要日志配置也要能根據(jù)不同的環(huán)境,使用不同的配置策略。

spring boot中的logback就可以滿足這樣的需求,例子如下:


將上面的代碼保存到logback-spring.xml文件中,而不是logback.xml中。

Spring boot 激活 profile的幾種方式

在配置文件中直接指定

spring.profiles.active=test

這種方式非常不靈活,在實際開發(fā)部不太會使用到

使用占位符

在打包時替換,以mavne為例:

首先在配置文件中增加:

spring.profiles.active=@package.target@

在pom.xml中增加不同環(huán)境打包的配置:


執(zhí)行打包命令:

mvn package -Ptest

缺點:每次打包都要指定profile

JVM參數(shù)方式

java命令行指定:

java -jar app.jar --spring.profiles.active=dev

tomcat 中 catalina.bat(.sh中不用“set”) 添加JAVA_OPS。通過設置active選擇不同配置文件:

set JAVA_OPTS="-Dspring.profiles.active=test"

eclipse 中啟動tomcat。項目右鍵 run as –> run configuration–>Arguments–> VM arguments中添加。

-Dspring.profiles.active="dev"

在微服務的時代,會不會覺得有點麻煩呢?

web.xml方式

標注方式(junit單元測試非常實用)

@ActiveProfiles({"dev"})

ENV方式(建議使用此方式)

設置系統(tǒng)環(huán)境變量:SPRING_PROFILES_ACTIVE(注意:是大寫)

比如mac開發(fā)環(huán)境中設置環(huán)境變量的方法:

vi ~/.bash_profile

在~/.bash_profile中增加如下內容:

export SPRING_PROFILES_ACTIVE=dev

總結

上面關于profile的東西,基本能滿足工作的需要了。使用profile后,可以減化因不同環(huán)境配置差異,而帶來的配置管理以及打包工作。

盡量使用環(huán)境變量來激活profile,如果是可執(zhí)行的包,也可以使用java命令行指定,其它方式不建議使用。

使用profile后,使得應用能更容易接入配置中心,以及使用docker容器技術,所以非常有意義。

相關文章

  • springsecurity中http.permitall與web.ignoring的區(qū)別說明

    springsecurity中http.permitall與web.ignoring的區(qū)別說明

    這篇文章主要介紹了springsecurity中http.permitall與web.ignoring的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 詳解springboot?springsecuroty中的注銷和權限控制問題

    詳解springboot?springsecuroty中的注銷和權限控制問題

    這篇文章主要介紹了springboot-springsecuroty?注銷和權限控制,賬戶注銷需要在SecurityConfig中加入開啟注銷功能的代碼,權限控制要導入springsecurity和thymeleaf的整合依賴,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2022-03-03
  • SpringBoot多環(huán)境配置及配置文件分類實例詳解

    SpringBoot多環(huán)境配置及配置文件分類實例詳解

    這篇文章主要介紹了SpringBoot多環(huán)境配置及配置文件分類,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • Java11中基于嵌套關系的訪問控制優(yōu)化詳解

    Java11中基于嵌套關系的訪問控制優(yōu)化詳解

    Java(和其他語言)通過內部類支持嵌套類,要使其正常工作,需要編譯器執(zhí)行一些技巧,下面這篇文章主要給大家介紹了關于Java11中基于嵌套關系的訪問控制優(yōu)化的相關資料,需要的朋友可以參考下
    2022-01-01
  • Mybatis實現(xiàn)SQL映射的兩種方法(xml文件形式和注解形式)

    Mybatis實現(xiàn)SQL映射的兩種方法(xml文件形式和注解形式)

    這篇文章主要介紹了Mybatis實現(xiàn)SQL映射的兩種方法(xml文件形式和注解形式),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • UniApp?+?SpringBoot?實現(xiàn)微信支付和退款功能

    UniApp?+?SpringBoot?實現(xiàn)微信支付和退款功能

    這篇文章主要介紹了UniApp?+?SpringBoot?實現(xiàn)微信支付和退款功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 一篇文章帶你了解SpringMVC數(shù)據(jù)綁定

    一篇文章帶你了解SpringMVC數(shù)據(jù)綁定

    這篇文章主要給大家介紹了關于如何通過一篇文章弄懂Spring MVC的參數(shù)綁定,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2021-08-08
  • Spring Cloud 2023 新特性支持同步網(wǎng)關

    Spring Cloud 2023 新特性支持同步網(wǎng)關

    這篇文章主要為大家介紹了Spring Cloud 2023 新特性支持同步網(wǎng)關講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • springmvc使用REST出現(xiàn):Request?method?'PUT'?not?supported問題

    springmvc使用REST出現(xiàn):Request?method?'PUT'?not?sup

    這篇文章主要介紹了springmvc使用REST出現(xiàn):Request?method?'PUT'?not?supported問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring5新功能日志框架Log4j2整合示例

    Spring5新功能日志框架Log4j2整合示例

    這篇文章主要為大家介紹了Spring5新功能之日志框架Log4j2的整合示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05

最新評論