這波啊~這波是多環(huán)境配置
前言文章已收錄到我的Github精選,歡迎Star:https://github.com/yehongzhi/learningSummary
一般來說,在日常開發(fā)中都會分多個環(huán)境,比如git代碼分支會分為dev(開發(fā))、release(測試)、pord(生產(chǎn))等多個環(huán)境。可以說每個環(huán)境對應(yīng)的配置信息(比如數(shù)據(jù)庫、緩存、消息隊列MQ等)都不相同。因此不同的環(huán)境肯定需要對應(yīng)不同的配置文件。接下來學(xué)習(xí)一下怎么配置多環(huán)境的配置文件。
SpringBoot多環(huán)境配置因為SpringBoot做多環(huán)境配置比較簡單,而且現(xiàn)在大部分項目基本都會使用SpringBoot,所以這里就介紹怎么用SpringBoot做多環(huán)境配置。
單文件版本
單文件在實際中使用得并不多,不過也可以實現(xiàn)多環(huán)境配置,這里簡單介紹一下。以application.yml配置文件舉例,你要在一個配置文件里面配置多個環(huán)境的配置,肯定需要分割線將其隔開,所以SpringBoot就規(guī)定了使用---進(jìn)行隔開每個環(huán)境。
spring:
??application:
????name:?mydemo
??profiles:
????active:?prod?#?選擇prod環(huán)境配置
#整合mybatis
mybatis-plus:
??mapper-locations:?classpath:mapper/*Mapper.xml
??type-aliases-package:?com.yehongzhi.mydemo.model
??configuration:
????log-impl:?org.apache.ibatis.logging.stdout.StdOutImpl
---
#?開發(fā)環(huán)境
server:
??port:?8080
spring:
??profiles:?dev
??datasource:
????driver-class-name:?com.mysql.jdbc.Driver
????url:?jdbc:mysql://DEV_IP:3306/user?createDatabaseIfNotExist=true
????username:?root
????password:?123456
---
#?測試環(huán)境
server:
??port:?8090
spring:
??profiles:?release
??datasource:
????driver-class-name:?com.mysql.jdbc.Driver
????url:?jdbc:mysql://RELEASE_IP:3306/user?createDatabaseIfNotExist=true
????username:?root
????password:?123456
---
#?生產(chǎn)環(huán)境
server:
??port:?8888
spring:
??profiles:?prod
??datasource:
????driver-class-name:?com.mysql.jdbc.Driver
????url:?jdbc:mysql://PROD_IP:3306/user?createDatabaseIfNotExist=true
????username:?root
????password:?123456
單文件配置多環(huán)境的缺點很明顯,就是會導(dǎo)致這個application.yml文件非常大,不夠清晰。最好是一個環(huán)境單獨一個文件,這樣就清晰很多。于是乎就有了多文件版本。
多文件版本
一般SpringBoot的配置文件都是叫application.yml或者application.properties,這里用application.yml舉例,配置多環(huán)境配置文件,文件名需要滿足這樣的格式:application-{profile}.yml。看下圖就明白了。

換而言之,dev環(huán)境的配置文件就叫做application-dev.yml,那么怎么選擇哪個環(huán)境的配置文件呢,其實很簡單,只需要在application.yml加上如下配置:
spring:
??profiles:
????active:?dev
這就表示選擇加載application-dev.yml文件,何以見得?
一般在啟動完成之后,我們可以在控制臺搜索關(guān)鍵字profiles找到對應(yīng)的環(huán)境。

所以我們就可以在application.yml里面,通過spring.profiles.active切換不同的環(huán)境。這就是多文件版本。
但是我們在平時開發(fā)時發(fā)現(xiàn),這個配置要經(jīng)常改來改去,非常麻煩,有沒有不用改這個配置就可以切換的方法呢?當(dāng)然有。
首先在pom.xml文件增加以下環(huán)境變量的配置。
<profiles>
????<profile>
????????<id>devid>
????????<properties>
????????????<profiles.active>devprofiles.active>
????????properties>
????profile>
????<profile>
????????<id>releaseid>
????????<properties>
????????????<profiles.active>releaseprofiles.active>
????????properties>
????profile>
????<profile>
????????<id>prodid>
????????<properties>
????????????<profiles.active>prodprofiles.active>
????????properties>
????profile>
profiles>
接著在application.yml配置文件中使用@profiles.active@來配置環(huán)境變量。
spring:
??profiles:
????active:?'@profiles.active@'
接著刷新Maven,可以在IDEA右側(cè)中選擇對應(yīng)的環(huán)境,如下圖:

當(dāng)需要切換環(huán)境時,就不需要改配置文件的內(nèi)容,只需要勾選對應(yīng)的環(huán)境即可,就方便很多。
結(jié)合Nacos配置中心
一般在項目開發(fā)中,都需要配置信息能夠在運行時更改配置,于是乎就有了配置中心的概念。配置中心當(dāng)然也有多環(huán)境的配置。
在Nacos配置中心就有命名空間的概念,我們可以使用命名空間來實現(xiàn)多環(huán)境配置。首先引入Maven依賴:
<dependencies>
????<dependency>
????????<groupId>com.alibaba.cloudgroupId>
????????<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
????????<version>2.0.2.RELEASEversion>
????dependency>
dependencies>
<profiles>
????<profile>
????????<id>devid>
????????<properties>
????????????<profiles.active>devprofiles.active>
????????properties>
????profile>
????<profile>
????????<id>releaseid>
????????<properties>
????????????<profiles.active>releaseprofiles.active>
????????properties>
????profile>
????<profile>
????????<id>prodid>
????????<properties>
????????????<profiles.active>prodprofiles.active>
????????properties>
????profile>
profiles>
第二步,啟動Nacos,然后在創(chuàng)建對應(yīng)的命名空間和配置文件。


第三步,在項目中增加bootstrap.yml文件。
spring:
??application:
????name:?mydemo
??profiles:
????active:?'@profiles.active@'
??cloud:
????nacos:
??????config:
????????server-addr:?127.0.0.1:8848
????????file-extension:?yaml
????????group:?DEFAULT_GROUP
????????namespace:?a4a33d52-371b-451a-a3c1-d01c1d343331?#dev命名空間的ID
????????enabled:?true
????????prefix:?${spring.application.name}
????????refresh-enabled:?true
在IDEA配置項目啟動時設(shè)置環(huán)境變量。

這樣就完成了,啟動項目,就可以讀到Nacos配置中心的dev命名空間的mydemo-dev.yaml文件。
因為DataId的定義規(guī)則是${prefix}-${spring.profiles.active}.${file-extension}。
總結(jié)prefix默認(rèn)規(guī)則是獲取${spring.application.name}的值。可以通過spring.cloud.nacos.config.prefix進(jìn)行配置。
spring.profiles.active即為當(dāng)前環(huán)境對應(yīng)的profile。可以通過spring.profiles.active進(jìn)行配置。
file-extension為配置文件的數(shù)據(jù)格式。可以通過spring.cloud.nacos.config.file-extension進(jìn)行配置。
以上就是多環(huán)境配置的三種方式,多環(huán)境配置基本上是創(chuàng)建新項目的基本操作,所以掌握多環(huán)境配置還是很有必要的。感謝大家的閱讀,希望看完之后能對你有所收獲。
覺得有用就點個贊吧,你的點贊是我創(chuàng)作的最大動力~
我是一個努力讓大家記住的程序員。我們下期再見!!!
能力有限,如果有什么錯誤或者不當(dāng)之處,請大家批評指正,一起學(xué)習(xí)交流!
