spring.profiles使用的方法步驟
本文來(lái)說(shuō)下spring.profiles.active和spring.profiles.include的使用與區(qū)別
業(yè)務(wù)場(chǎng)景
我們?cè)陂_(kāi)發(fā)Spring Boot應(yīng)用時(shí),通常同一套程序會(huì)被應(yīng)用和安裝到幾個(gè)不同的環(huán)境,比如:開(kāi)發(fā)、測(cè)試、生產(chǎn)等。其中每個(gè)環(huán)境的數(shù)據(jù)庫(kù)地址、服務(wù)器端口等等配置都會(huì)不同,如果在為不同環(huán)境打包時(shí)都要頻繁修改配置文件的話,那必將是個(gè)非常繁瑣且容易發(fā)生錯(cuò)誤的事。
對(duì)于多環(huán)境的配置,各種項(xiàng)目構(gòu)建工具或是框架的基本思路是一致的,通過(guò)配置多份不同環(huán)境的配置文件,再通過(guò)打包命令指定需要打包的內(nèi)容之后進(jìn)行區(qū)分打包,Spring Boot也不例外,或者說(shuō)更加簡(jiǎn)單。
spring.profiles.active屬性
一個(gè)好方法就是創(chuàng)建不同的配置文件,且命名規(guī)則遵循application-${profile}.yml,例如:
- 開(kāi)發(fā)環(huán)境配置文件:application-dev.yml
- 測(cè)試環(huán)境配置文件:application-test.yml
- 生產(chǎn)環(huán)境配置文件:application-prod.yml
當(dāng)然,我們不能刪除項(xiàng)目最頂層的application.yml配置,在該文件中,根據(jù)部署場(chǎng)景不同,切換不同的配置文件:配置spring.profiles.active,屬性值為${profile}。
spring.profiles.active=dev:?jiǎn)⒂胊pplication-dev.yml
spring.profiles.active=test:?jiǎn)⒂胊pplication-test.yml
spring.profiles.active=prod:?jiǎn)⒂胊pplication-prod.yml
啟動(dòng)時(shí)指定
在執(zhí)行有參啟動(dòng)時(shí),可以在命令中進(jìn)行指定要選用的配置文件,例如:java -jar xx.jar --spring.profiles.active=test
這個(gè)命令的優(yōu)先級(jí)是最高的,即使application.yml中已經(jīng)配置spring.profiles.active=dev,最終程序還是會(huì)用application-test.yml配置文件。
spring.profiles.include屬性
再進(jìn)一步,對(duì)于開(kāi)發(fā)環(huán)境,想用不同的配置文件存儲(chǔ)開(kāi)發(fā)環(huán)境不同的配置,例如:
- application-dev1.yml中存儲(chǔ)jdbc信息
- application-dev2.yml中存儲(chǔ)ip、端口信息
即在啟用application-dev.yml開(kāi)發(fā)環(huán)境(主)配置文件時(shí),同時(shí)啟用application-dev1.yml和application-dev2.yml。
那么,可以使用spring.profiles.include屬性:同時(shí)啟用其他的profile
配置方法
若是properties文件:spring.profiles.include=dev1,dev2
若是yaml文件中,spring.profiles.include:
-dev1
-dev2
或者:spring.profiles.include:dev1,dev2
配置位置
- 配置方式一:application.properties中,配置spring.profiles.active=dev的同時(shí)指定spring.profiles.include=dev1,dev2
- 配置方式二:application.properties中,配置spring.profiles.active=dev,application-dev.properties中,配置spring.profiles.include=dev1,dev2。使用application-dev.properties時(shí)自動(dòng)就激活了dev1、dev2兩個(gè)文件,不用再次指定。(個(gè)人認(rèn)為第二種方法更好)
配置區(qū)別
- 第一種方式啟動(dòng)時(shí),控制臺(tái)打印The following profiles are active:dev1,dev2,dev
- 第二種方式啟動(dòng)時(shí),控制臺(tái)打印The following profiles are active:dev, dev1,dev2
按照順序,后面的覆蓋前面的。
用示例來(lái)使用和區(qū)分
application.yml配置:
server: port: 8088 #激活的是開(kāi)發(fā)環(huán)境配置文件 spring: profiles: active: dev
application-dev.yml配置:
server: port: 8089 #同時(shí)觸發(fā)dev1和dev2的激活 spring: profiles: include: dev1,dev2
application-dev1.yml配置:
server: port: 8090
application-dev2.yml配置:
server: port: 8091
application-prod.yml配置:
server: port: 9088 #同時(shí)觸發(fā)prod1和prod2的激活 spring: profiles: include: prod1,prod2
application-prod1.yml配置:
server: port: 9089
application-prod2.yml配置:
server: port: 9090
測(cè)試一
在application.yml配置文件中,指定
#激活的是開(kāi)發(fā)環(huán)境配置文件 spring: profiles: active: dev
啟動(dòng)時(shí)不指定參數(shù)
啟動(dòng)dev2中的8091端口
測(cè)試二
在測(cè)試一的基礎(chǔ)上,啟動(dòng)時(shí)指定參數(shù):–spring.profiles.active=prod。優(yōu)先級(jí)最高,會(huì)使用生產(chǎn)環(huán)境配置文件
啟動(dòng)結(jié)果
測(cè)試三
在application.yml配置文件中,指定
#激活的是開(kāi)發(fā)環(huán)境配置文件 spring: profiles: active: dev include: dev1,dev2
啟動(dòng)結(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("啟動(dòng)失?。?,e); } } }
程序結(jié)果
本文小結(jié)
到此這篇關(guān)于spring.profiles使用的方法步驟的文章就介紹到這了,更多相關(guān)spring.profiles使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于SpringBoot實(shí)現(xiàn)自動(dòng)裝配返回屬性的設(shè)計(jì)思路
這篇文章主要介紹了基于SpringBoot實(shí)現(xiàn)自動(dòng)裝配返回屬性,這里涉及到的技術(shù)知識(shí)點(diǎn)有注解解析器,為什么用ResponseBodyAdvice這里解析?不在Filter,Interceptors,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-03-03在navicat中導(dǎo)入mysql數(shù)據(jù)庫(kù)詳細(xì)步驟(即.sql后綴的數(shù)據(jù)庫(kù))
Navicat是MySQL非常好用的可視化管理工具,功能非常強(qiáng)大,能滿足我們?nèi)粘?shù)據(jù)庫(kù)開(kāi)發(fā)的所有需求,下面這篇文章主要給大家介紹了關(guān)于如何在navicat中導(dǎo)入mysql數(shù)據(jù)庫(kù)(即.sql后綴的數(shù)據(jù)庫(kù))的相關(guān)資料,需要的朋友可以參考下2023-04-04MyBatisPlus項(xiàng)目的創(chuàng)建和使用
本文介紹了MyBatis-Plus的基本使用方法,包括項(xiàng)目的創(chuàng)建和配置、增刪查改操作、日志打印以及條件構(gòu)造器的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11jmeter下載及安裝配置教程(win10平臺(tái)為例)
Apache?JMeter是Apache組織開(kāi)發(fā)的基于Java的壓力測(cè)試工具,Apache?jmeter?可以用于對(duì)靜態(tài)的和動(dòng)態(tài)的資源(文件,Servlet,Perl腳本,java?對(duì)象,數(shù)據(jù)庫(kù)和查詢,F(xiàn)TP服務(wù)器等等)的性能進(jìn)行測(cè)試,本文給大家介紹jmeter下載及安裝配置過(guò)程,感興趣的朋友一起看看吧2021-12-12SpringCloud配置客戶端ConfigClient接入服務(wù)端
這篇文章主要為大家介紹了SpringCloud配置客戶端ConfigClient接入服務(wù)端,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Springboot中Instant時(shí)間傳參及序列化詳解
這篇文章主要介紹了Springboot中Instant時(shí)間傳參及序列化詳解,Instant是Java8引入的一個(gè)精度極高的時(shí)間類型,可以精確到納秒,但實(shí)際使用的時(shí)候不需要這么高的精確度,通常到毫秒就可以了,需要的朋友可以參考下2023-11-11Spring Boot中使用JSR-303實(shí)現(xiàn)請(qǐng)求參數(shù)校驗(yàn)
這篇文章主要介紹了Spring Boot中使用JSR-303實(shí)現(xiàn)請(qǐng)求參數(shù)校驗(yàn),JSR-303校驗(yàn)我們一般都是對(duì)Java的實(shí)體類對(duì)象進(jìn)行校驗(yàn),主要檢驗(yàn)JSR-303是Java中的一個(gè)規(guī)范,用于實(shí)現(xiàn)請(qǐng)求參數(shù)校驗(yàn)在我們的實(shí)體類對(duì)象的屬性上,感興趣的朋友跟隨小編一起看看吧2023-10-10Java中如何利用Set判斷List集合中是否有重復(fù)元素
在開(kāi)發(fā)工作中,我們有時(shí)需要去判斷List集合中是否含有重復(fù)的元素,這時(shí)候我們不需要找出重復(fù)的元素,我們只需要返回一個(gè)?Boolean?類型就可以了,下面通過(guò)本文給大家介紹Java中利用Set判斷List集合中是否有重復(fù)元素,需要的朋友可以參考下2023-05-05詳解Spring-Cloud2.0之Feign調(diào)用遠(yuǎn)程服務(wù)指南
這篇文章主要介紹了詳解Spring-Cloud2.0之Feign調(diào)用遠(yuǎn)程服務(wù)指南,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01