Spring Boot配合Maven的Profile機制完成環境適配
我們在一個產品的生命週期內,會接觸多個環節:開發環境、測試環境、生產環境,這些環境會對應不同的DataSource、Redis叢集、Zookeeper等配置。
- Maven的Profile機制
Profile能讓你為一個特殊的環境自定義一個特殊的構建;profile使得不同環境間構建的可移植性成為可能。Maven中的profile是一組可選的配置,可以用來設定或者覆蓋配置預設值。有了profile,你就可以為不同的環境定製構建。
<project>
<profiles>
<profile>
<build>
<defaultGoal>...</defaultGoal>
<finalName>...</finalName>
<resources>...</resources>
<testResources>...</testResources>
<plugins>...</plugins>
</build>
<reporting>...</reporting>
<modules>...</modules>
<dependencies>...</dependencies>
<dependencyManagement>...</dependencyManagement>
<distributionManagement>...</distributionManagement>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<properties>...</properties>
</profile>
</profiles>
</project>
一個Profile可以覆蓋專案構件的最終名稱,專案依賴,外掛配置以影響構建行為,Profile還可以覆蓋分發配置。maven提供了一種針對不同環境引數“啟用”一個profile的方式,這就叫做profile啟用。
使用-P引數顯示的啟用一個profile
我們在進行Maven操作時就可以使用-P引數顯示的指定當前啟用的是哪一個profile了。比如我們需要在對專案進行打包的時候使用id為profileTest1的profile,我們就可以這樣做:
mvn package –P profileTest1
- Spring Boot的支援
SpringBoot使用一個全域性的配置檔案application.properties
或application.yml
,配置檔案路徑:src/main/resource目錄下或類路徑下的/config下。
Spring boot支援配置多個環境的配置檔案,其配置檔名字格式application-{profile}.yml
Spring可以在application.properties
指定啟用的profile,配置如下:
#properties格式
spring.profiles.active=dev
也可以在啟動應用的時候新增啟動引數--spring.profiles.active=dev
。
(⚠️Spring Boot的Profile機制和Maven的其實是沒關係的,文末給出了一篇部落格,講解了如何將Maven的Profile機制與Spring Boot的active profile機制同步,未驗證)
-
微服務環境下的配置檔案
前面介紹的兩種方式,配置檔案都顯式的暴露在專案中,這對於實際運營的專案,是有比較多的問題的:- 對於線上運營的專案有安全隱患,資料庫等資訊都會暴露出來,給產品的安全帶來很大的隱患
- 對於微服務場景,不利於維護
(1)配置分散在不同的專案中,不利於統一管理
(2)配置和程式碼處於同一個版本體系下,不利於版本管理
(3)多個系統共同使用的配置更改時,需要一處處去修改,非常麻煩,容易出錯
(4)對於動態配置的檔案,也不利於OPS維護
因此,業界普遍採用了Config Server的方式,Spring Cloud提供了Spring Cloud Config的元件,幫助我們管理微服務的配置。
Consu可以l作為配置服務,並採用git儲存。另外Spring Cloud Config也支援git版本管理,Consul在可用性的支援上更勝一籌;對於動態配置,Consul也會方便一些不需要藉助Spring Cloud Bus這樣的中介軟體。(Spring Cloud Bus將Spring的事件處理機制和訊息中介軟體訊息的傳送和接收整合起來,可以輕鬆的將分散式應用中連線有訊息中介軟體的多個服務節點連線起來,實現訊息互通。)
參考文獻:
https://www.cnblogs.com/wxgblogs/p/6696229.html(Maven Profiles詳解)
https://www.jianshu.com/p/8c48f4fd69da(Profile之Maven、Spring Boot、Spring Cloud Config)
https://www.cnblogs.com/softidea/p/6375806.html(從Maven的Profile環境獲取Spring Boot的active profile)
https://yq.aliyun.com/articles/468274(阿里巴巴微服務配置中心介紹)
https://www.jianshu.com/p/b1463c1df5a2(Consul作為微服務配置中心)
相關文章
- Spring Boot - Profile不同環境配置Spring Boot
- 多環境支援-Maven和Spring的ProfileMavenSpring
- maven 使用maven profile實現多環境可移植構建Maven
- spring boot環境抽象Spring Boot抽象
- 使用 Maven Profile 和 Filtering 打各種環境的包MavenFilter
- 使用maven的profile切換專案各環境的引數Maven
- 深度剖析Spring Boot自動裝配機制實現原理Spring Boot
- maven學習(下)利用Profile構建不同環境的部署包Maven
- 深入剖析 Spring Boot 的 SPI 機制Spring Boot
- maven環境下建立一個spring的java工程MavenSpringJava
- 【面試普通人VS高手系列】Spring Boot中自動裝配機制的原理面試Spring Boot
- 行者APP適配國外環境問題解決APP
- Maven 環境搭建Maven
- MAVEN環境搭建Maven
- MAVEN中的profileMaven
- spring boot學習4 多環境配置Spring Boot
- Spring Boot 2.4 對多環境配置的支援更改Spring Boot
- 流機制環境準備
- Spring Boot + Mybatis + Spring MVC環境配置(三):DataSource配置Spring BootMyBatisMVC
- 解析Spring Boot中的事務管理機制Spring Boot
- Spring Boot入門(二):使用Profile實現多環境配置管理&獲取配置檔案值的兩種方式Spring Boot
- Spring Boot + Mybatis + Spring MVC環境配置(一) :Spring Boot初始化,依賴新增Spring BootMyBatisMVC
- Spring Boot + Mybatis + Spring MVC環境配置(五):templates模板使用Spring BootMyBatisMVC
- Spring Boot + Mybatis + Spring MVC環境配置(四):MVC框架搭建Spring BootMyBatisMVC框架
- Spring Boot + Mybatis + Spring MVC環境配置(二):Mybatis Generator配置Spring BootMyBatisMVC
- Router: 教你如何進行任意外掛化環境下的路由適配路由
- Spring9:Autowire(自動裝配)機制Spring
- Spring Boot 專案 Maven Install 出現的問題 [WARNING] The requested profile “pom.xml“ could not be activatedSpring BootMavenXML
- 基於spring-boot&spring-data-jpa的web開發環境整合SpringbootWeb開發環境
- Windows10 Java Spring boot 開發環境搭建WindowsJavaSpring Boot開發環境
- 在 Kotlin + Spring Boot 中使用環境變數KotlinSpring Boot變數
- 基於spring boot 及mybatis的web開發環境搭建Spring BootMyBatisWeb開發環境
- 華為手環耳機模式適配模式
- Flutter多平臺適配機制就是這麼簡單Flutter
- Eclipse配置maven環境EclipseMaven
- Maven環境下MyBatisGenerator 配置MavenMyBatis
- Maven學習--profileMaven
- Maven專案Spring Boot啟動MavenSpring Boot