一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - 使用Spring boot 的profile功能實現多環境配置自動切換

使用Spring boot 的profile功能實現多環境配置自動切換

2021-06-17 11:10黑少 Java教程

這篇文章主要介紹了使用Spring boot 的profile功能實現多環境配置自動切換的相關知識,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下

通常服務端應用開發需要經過以下幾個流程:

開發 -> 測試 -> rc驗證 -> 上線

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

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

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

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

spring中的profile 是什么?

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

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

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

比如,開發環境的profile為:dev;測試環境的profile為:test;rc環境的profile為:rc;生產環境的profile為:prod。

下面舉個dubbo不同環境下,使用不同配置的方法:


使用Spring boot 的profile功能實現多環境配置自動切換

上面例子中,當激活相應的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。

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

@profile注解的使用

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


使用Spring boot 的profile功能實現多環境配置自動切換

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

logback中profile的使用

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

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


使用Spring boot 的profile功能實現多環境配置自動切換

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

spring boot 激活 profile的幾種方式

在配置文件中直接指定

spring.profiles.active=test

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

使用占位符

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

首先在配置文件中增加:

[email protected]@

在pom.xml中增加不同環境打包的配置:


使用Spring boot 的profile功能實現多環境配置自動切換

執行打包命令:

mvn package -ptest

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

jvm參數方式

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方式(建議使用此方式)

設置系統環境變量:spring_profiles_active(注意:是大寫)

比如mac開發環境中設置環境變量的方法:

vi ~/.bash_profile

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

export spring_profiles_active=dev

總結

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

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

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

原文鏈接:http://www.cnblogs.com/heishao/p/10008436.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美日韩一区二区三区 | 久久综合给会久久狠狠狠 | 91短视频在线播放 | 久久日韩精品无码一区 | 波多野结在线观看 | 久久精品国产亚洲AV麻豆欧美玲 | 日本视频在线免费观看 | ass老妇黑森林pic | 国产精品福利在线观看入口 | 日本草草视频在线观看 | 成人精品视频 成人影院 | 色久网 | 精品国产在天天线在线麻豆 | 日韩在线视精品在亚洲 | 久久精品中文闷骚内射 | 精品国产一区二区三区久久影院 | 婷婷久久综合九色综合九七 | 农村美女沟厕嘘嘘被偷看 | 99久久伊人一区二区yy5099 | 国产无限 | 午夜影院费试看黄 | 男人的天堂在线观看视频不卡 | 亚洲国产精品一区二区久久 | 欧美视频在线一区 | 毛片免费的 | spank日本网站脱裤子打屁股 | 四虎新网站 | 女人张开腿让男人桶视频免费大全 | 性做久久久久久久久老女人 | 亚洲系列在线 | 日韩免费一区 | 色综合久久夜色精品国产 | 日本aaaaa高清免费看 | 操bb视频| 91国内精品线免费播放 | 黄a 大片a v 永久免费 | 欧美一级高清片 | 91在线精品视频 | 日本视频二区 | 精品小视频在线 | 国产精品99久久免费观看 |