spring.profiles使用的方法步驟
本文來說下spring.profiles.active和spring.profiles.include的使用與區(qū)別
業(yè)務(wù)場景
我們在開發(fā)Spring Boot應(yīng)用時,通常同一套程序會被應(yīng)用和安裝到幾個不同的環(huán)境,比如:開發(fā)、測試、生產(chǎn)等。其中每個環(huán)境的數(shù)據(jù)庫地址、服務(wù)器端口等等配置都會不同,如果在為不同環(huán)境打包時都要頻繁修改配置文件的話,那必將是個非常繁瑣且容易發(fā)生錯誤的事。
對于多環(huán)境的配置,各種項目構(gòu)建工具或是框架的基本思路是一致的,通過配置多份不同環(huán)境的配置文件,再通過打包命令指定需要打包的內(nèi)容之后進(jìn)行區(qū)分打包,Spring Boot也不例外,或者說更加簡單。
spring.profiles.active屬性
一個好方法就是創(chuàng)建不同的配置文件,且命名規(guī)則遵循application-${profile}.yml,例如:
- 開發(fā)環(huán)境配置文件:application-dev.yml
- 測試環(huán)境配置文件:application-test.yml
- 生產(chǎn)環(huán)境配置文件:application-prod.yml
當(dāng)然,我們不能刪除項目最頂層的application.yml配置,在該文件中,根據(jù)部署場景不同,切換不同的配置文件:配置spring.profiles.active,屬性值為${profile}。
spring.profiles.active=dev:啟用application-dev.yml
spring.profiles.active=test:啟用application-test.yml
spring.profiles.active=prod:啟用application-prod.yml
啟動時指定
在執(zhí)行有參啟動時,可以在命令中進(jìn)行指定要選用的配置文件,例如:java -jar xx.jar --spring.profiles.active=test
這個命令的優(yōu)先級是最高的,即使application.yml中已經(jīng)配置spring.profiles.active=dev,最終程序還是會用application-test.yml配置文件。
spring.profiles.include屬性
再進(jìn)一步,對于開發(fā)環(huán)境,想用不同的配置文件存儲開發(fā)環(huán)境不同的配置,例如:
- application-dev1.yml中存儲jdbc信息
- application-dev2.yml中存儲ip、端口信息
即在啟用application-dev.yml開發(fā)環(huán)境(主)配置文件時,同時啟用application-dev1.yml和application-dev2.yml。
那么,可以使用spring.profiles.include屬性:同時啟用其他的profile
配置方法
若是properties文件:spring.profiles.include=dev1,dev2
若是yaml文件中,spring.profiles.include:
-dev1
-dev2
或者:spring.profiles.include:dev1,dev2
配置位置
- 配置方式一:application.properties中,配置spring.profiles.active=dev的同時指定spring.profiles.include=dev1,dev2
- 配置方式二:application.properties中,配置spring.profiles.active=dev,application-dev.properties中,配置spring.profiles.include=dev1,dev2。使用application-dev.properties時自動就激活了dev1、dev2兩個文件,不用再次指定。(個人認(rèn)為第二種方法更好)
配置區(qū)別
- 第一種方式啟動時,控制臺打印The following profiles are active:dev1,dev2,dev
- 第二種方式啟動時,控制臺打印The following profiles are active:dev, dev1,dev2
按照順序,后面的覆蓋前面的。
用示例來使用和區(qū)分
application.yml配置:
server:
port: 8088
#激活的是開發(fā)環(huán)境配置文件
spring:
profiles:
active: devapplication-dev.yml配置:
server:
port: 8089
#同時觸發(fā)dev1和dev2的激活
spring:
profiles:
include: dev1,dev2application-dev1.yml配置:
server: port: 8090
application-dev2.yml配置:
server: port: 8091
application-prod.yml配置:
server:
port: 9088
#同時觸發(fā)prod1和prod2的激活
spring:
profiles:
include: prod1,prod2application-prod1.yml配置:
server: port: 9089
application-prod2.yml配置:
server: port: 9090
測試一
在application.yml配置文件中,指定
#激活的是開發(fā)環(huán)境配置文件
spring:
profiles:
active: dev啟動時不指定參數(shù)

啟動dev2中的8091端口

測試二
在測試一的基礎(chǔ)上,啟動時指定參數(shù):–spring.profiles.active=prod。優(yōu)先級最高,會使用生產(chǎn)環(huán)境配置文件

啟動結(jié)果

測試三
在application.yml配置文件中,指定
#激活的是開發(fā)環(huán)境配置文件
spring:
profiles:
active: dev
include: dev1,dev2啟動結(jié)果

編寫程序查看激活的yml文件
編寫程序查看激活的yml文件
package com.wideth;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
@Slf4j
@SpringBootApplication
public class AppApplication {
public static void main(String[] args) {
try {
ApplicationContext ctx = SpringApplication.run
(AppApplication.class, args);
String[] activeProfiles = ctx.getEnvironment().
getActiveProfiles();
for (String profile : activeProfiles) {
log.warn("Spring Boot 使用profile為:{}" , profile);
}
} catch (Exception e) {
log.error("啟動失??!",e);
}
}
}程序結(jié)果

本文小結(jié)
到此這篇關(guān)于spring.profiles使用的方法步驟的文章就介紹到這了,更多相關(guān)spring.profiles使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Cloud Gateway 內(nèi)存溢出的解決方案
這篇文章主要介紹了Spring Cloud Gateway 內(nèi)存溢出的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
MybatisPlus 連表查詢、邏輯刪除功能實現(xiàn)(多租戶)
這篇文章主要介紹了MybatisPlus 連表查詢、邏輯刪除功能實現(xiàn)(多租戶),本文通過實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-12-12
springboot+springJdbc+postgresql 實現(xiàn)多數(shù)據(jù)源的配置
本文主要介紹了springboot+springJdbc+postgresql 實現(xiàn)多數(shù)據(jù)源的配置,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
springboot跨域訪問cros與@CrossOrigin注解詳析
這篇文章主要給大家介紹了關(guān)于springboot跨域訪問cros與@CrossOrigin注解的相關(guān)資料,跨域是指不同域名之間相互訪問,它是瀏覽器的同源策略造成的,是瀏覽器對JavaScript施加的安全限制,需要的朋友可以參考下2023-12-12
Java日常練習(xí)題,每天進(jìn)步一點點(53)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你2021-08-08
詳解Spring Boot實戰(zhàn)之Filter實現(xiàn)使用JWT進(jìn)行接口認(rèn)證
本篇文章主要介紹了詳解Spring Boot實戰(zhàn)之Filter實現(xiàn)使用JWT進(jìn)行接口認(rèn)證,具有一定的參考價值,有興趣的可以了解一下2017-07-07
Spring?web開發(fā)教程之Request獲取3種方式
這篇文章主要給大家介紹了關(guān)于Spring?web開發(fā)教程之Request獲取3種方式的相關(guān)資料,request對象是從客戶端向服務(wù)器發(fā)出請求,包括用戶提交的信息以及客戶端的一些信息,需要的朋友可以參考下2023-11-11

