實(shí)戰(zhàn)!三分鐘搞定Spring Boot 多環(huán)境配置
本文轉(zhuǎn)載自微信公眾號「架構(gòu)師精進(jìn)」,作者章為忠。轉(zhuǎn)載本文請聯(lián)系架構(gòu)師精進(jìn)公眾號。
在實(shí)際項(xiàng)目開發(fā)的過程中,需要面對不同的運(yùn)行環(huán)境,比如開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境等,每個運(yùn)行環(huán)境的數(shù)據(jù)庫、Redis服務(wù)器等配置都不相同,每次發(fā)布測試、更新生產(chǎn)都需要手動修改相關(guān)系統(tǒng)配置。這種方式特別麻煩,費(fèi)時費(fèi)力,而且出錯的概率極大。慶幸的是,Spring Boot為我們提供了更加簡單方便的配置方案來解決多環(huán)境的配置問題,下面就來演示Spring Boot系統(tǒng)如何實(shí)現(xiàn)多環(huán)境配置。
一、多環(huán)境的配置
通常應(yīng)用系統(tǒng)可能在開發(fā)環(huán)境(dev)、測試環(huán)境(test)、生產(chǎn)環(huán)境(prod)中運(yùn)行,那么如何做到多個運(yùn)行環(huán)境配置靈活、快速切換呢?SpringBoot提供了極簡的解決方案,只需要簡單的配置,應(yīng)用系統(tǒng)就能靈活切換運(yùn)行環(huán)境配置。
1. 創(chuàng)建多環(huán)境配置文件
創(chuàng)建多環(huán)境配置文件時,需要遵循Spring Boot允許的命名約定來命名,格式為application-{profile}.properties,其中{profile}為對應(yīng)的環(huán)境標(biāo)識。在項(xiàng)目resources目錄下分別創(chuàng)建application-dev.properties、application-test.properties和application-prod.properties三個配置文件,對應(yīng)開發(fā)環(huán)境、測試環(huán)境和生產(chǎn)環(huán)境,如下圖所示:
根據(jù)應(yīng)用系統(tǒng)中常見的三個運(yùn)行環(huán)境拆分成了多個不同的配置文件,分別獨(dú)立配置上面各運(yùn)行環(huán)境的配置項(xiàng)。具體如下所示:
- application.properties為項(xiàng)目主配置文件,包含項(xiàng)目所需的所有公共配置。
- application-dev.properties為開發(fā)環(huán)境配置文件,包含項(xiàng)目所需的單獨(dú)配置。
- application-test.properties為測試環(huán)境配置文件。
- application-prod.properties為生產(chǎn)環(huán)境配置文件。
2. 修改配置文件
通常情況下,開發(fā)環(huán)境、測試環(huán)境和生產(chǎn)環(huán)境使用的數(shù)據(jù)庫是不一樣的,所以接下來以不同環(huán)境配置不同數(shù)據(jù)庫為例來演示多環(huán)境的配置。
首先,修改application.properties,配置系統(tǒng)的啟動端口:
# 服務(wù)器端口配置
server.port=8088
在上面的示例中,application.properties包含項(xiàng)目所需的所有公共配置,這里配置系統(tǒng)的啟動端口,所有環(huán)境的啟動端口都是8088。
然后,修改application-dev.properties開發(fā)環(huán)境的配置,增加數(shù)據(jù)庫的連接配置,代碼示例如下:
# 指定數(shù)據(jù)庫驅(qū)動
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 數(shù)據(jù)庫jdbc連接url地址
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/myapp_dev
# 數(shù)據(jù)庫賬號
spring.datasource.username=root
spring.datasource.password=root
配置數(shù)據(jù)庫連接的相關(guān)屬性,我們看到開發(fā)環(huán)境配置的數(shù)據(jù)庫是myapp_dev。
其他環(huán)境的配置文件修改對應(yīng)的配置連接即可,以上項(xiàng)目的多環(huán)境配置就完成了。接下來演示切換項(xiàng)目運(yùn)行環(huán)境。
二、多環(huán)境的切換
前面講了如何配置多環(huán)境,那么,在實(shí)際測試、運(yùn)行過程中如何切換系統(tǒng)運(yùn)行環(huán)境呢?這個也非常簡單,通過修改application.properties配置文件中的spring.profiles.active配置項(xiàng)來激活相應(yīng)的運(yùn)行環(huán)境。如果沒有指定任何profile的配置文件,Spring Boot默認(rèn)會啟動application-default.properties(默認(rèn)環(huán)境)。
指定項(xiàng)目的啟動環(huán)境有以下三種方式:
(1)配置文件指定項(xiàng)目啟動環(huán)境
Spring Boot支持通過spring.profiles.active配置項(xiàng)目啟動環(huán)境,在application.properties配置文件中增加如下配置項(xiàng)指定對應(yīng)的環(huán)境目錄:
# 系統(tǒng)運(yùn)行環(huán)境
spring.profiles.active=dev
在上面的示例中,通過在application.properties配置文件中設(shè)置spring.profiles.active的配置項(xiàng)來配置系統(tǒng)的運(yùn)行環(huán)境。這里配置的是dev開發(fā)環(huán)境。
(2)IDEA編譯器指定項(xiàng)目啟動環(huán)境
一般在IDEA啟動時,直接在IDEA的Run/debug Configuration頁面配置項(xiàng)目啟動環(huán)境,如下圖所示。
項(xiàng)目調(diào)試運(yùn)行時,IDEA編譯器可以通過VM options、Program arguments、Active profiles三個參數(shù)設(shè)置啟動方式。
(3)命令行啟動指定項(xiàng)目環(huán)境
在命令行通過java-jar命令啟動項(xiàng)目時,需要如下指定啟動環(huán)境:
java -jar xxx.jar --spring.profiles.active=dev
如上所示,程序打包之后,可以在命令行使用java –jar的方式啟動,并設(shè)置啟動參數(shù)spring.profiles.active=dev,以開發(fā)環(huán)境為默認(rèn)配置。在application-{profile}.properties中配置完成后,啟動項(xiàng)目時,在系統(tǒng)啟動日志中可以看到加載的是哪個環(huán)境的配置文件,如下圖所示:
在上面的啟動日志中可以看到系統(tǒng)目前啟動的是dev開發(fā)環(huán)境。如果實(shí)現(xiàn)相關(guān)的數(shù)據(jù)庫測試方法,可以驗(yàn)證相應(yīng)的數(shù)據(jù)庫操作是否生效。
最后
以上,我們就把Spring Boot 多環(huán)境配置介紹完了。Spring Boot 多環(huán)境配置是非?;A(chǔ),非常重要的功能,也是Spring Cloud 配置中心的基本配置。