在項目開發的過程中,我們難免會遇到開發、測試、生產等環境的切換,而各個環境的配置肯定是不同的。傳統的辦法是在項目打包的時候修改配置文件。但人為做的事情難免產生意外。Spring 為我們提供了一種多環境配置文件同時存在,而運行/打包時僅運行所選的配置文件的方式。具體的介紹如下:
Spring提供了兩種屬性:
spring.profiles.active
spring:
profiles:
# active: yaya
active: keats
指定激活哪個文件,值是 application-{profileName}.yml 中的 profileName。用於區分不同的運行環境。
PS:如果 application.yml 和被激活的 yml 中同時配置了一個相同的鍵,被激活的yml中的值會覆蓋 application.yml 中的值。
spring.profiles.include
spring:
profiles:
include: yayaDB,yayaRedis
指定包含(合並)多個yml的內容一起啟動。這樣有助於同環境下yml文件的分類管理
PS:像上面 include 值是多個的情況,除了使用 , 分隔的輸入方式外,還可以使用 換行 - profileName 的方式,這是 yml 的一種語法。如果不清楚 yml 的語法,可以參考 SpringBoot入門及YML文件詳解
spring:
profiles:
include:
- yayaDB # 注意換行和空格
- yayaRedis
接下來是一個示例的DEMO項目,項目的結構如下:

各文件內容如下:
application.yml
spring:
profiles:
active: yaya
# active: keats
server:
port: 9001 # 如果被激活的 yml 中有相同的配置,會覆蓋此值
application-keats.yml
server:
port: 9000
eureka:
server:
enable-self-preservation: false # 關閉自我保護
eviction-interval-timer-in-ms: 4000 # 剔除服務間隔,單位/ms
instance:
hostname: localhost
client:
register-with-eureka: false # 是否將自己注冊到注冊中心
fetch-registry: false # 是否從Eureka中獲取注冊信息
service-url: # Eureka Client 的請求地址
defaultZone: http://#{eureka.instance.hostname}:#{server.port}/eureka/
application-yaya.yml
spring:
profiles:
include: yayaDB,yayaRedis
application-yayaDB.yml
# 專門配置DB 的yml,實際項目中可以根據需求,配置文件多了需要分類就分類,少了用不着分類就一種環境一個YML# 這里因為Eureka服務用不到連接數據庫,用端口號配置信息代替
server:
port: 9100
application-yayaRedis.yml
# 可以專門用來配置Redis的信息。這里因為用不到Redis。我就用除端口以外的其他配置信息填充了
eureka:
server:
enable-self-preservation: false # 關閉自我保護
eviction-interval-timer-in-ms: 4000 # 剔除服務間隔,單位/ms
instance:
hostname: localhost
client:
register-with-eureka: false # 是否將自己注冊到注冊中心
fetch-registry: false # 是否從Eureka中獲取注冊信息
service-url: # Eureka Client 的請求地址
defaultZone: http://#{eureka.instance.hostname}:#{server.port}/eureka/
按照以上的 yml 配置之后,就可以通過注釋與放開不同的 active,來實現環境的切換了。
順便教大家另外一個技能:
Idea將同一個項目多次啟動
選擇對應的項目啟動類,點擊 Edit Configurations

取消勾選: Single instance only

