Spring Boot教程 - Spring Boot Profiles實(shí)現(xiàn)多環(huán)境下配置切換
原文:https://blog.csdn.net/FX_SKY/article/details/78570047
在后端開發(fā)中,應(yīng)用程序在不同的環(huán)境可能會有不同的配置,例如數(shù)據(jù)庫連接已添、日志級別等,開發(fā)箕肃,測試恋博,生產(chǎn)每個環(huán)境可能配置都不一致叨叙。
使用Spring Boot的Profile可以實(shí)現(xiàn)多場景下的配置切換,方便開發(fā)中進(jìn)行測試和部署生產(chǎn)環(huán)境船惨。 下面就大致介紹一下yml配置文件跟properties配置文件怎么使用profile配置不同環(huán)境的配置文件柜裸。
開發(fā)環(huán)境
- JDK 1.8
- Maven 3.x
- Spring Boot 1.5.8
- Intellij Idea 2017
一缕陕、使用Spring Boot Profiles
1. 使用yml文件
首先,我們先創(chuàng)建一個名為 application.yml的屬性文件,如下:
server:
port: 8080
my:
name: demo
spring:
profiles:
active: dev
---
#development environment
spring:
profiles: dev
server:
port: 8160
my:
name: ricky
---
#test environment
spring:
profiles: test
server:
port: 8180
my:
name: test
---
#production environment
spring:
profiles: prod
server:
port: 8190
my:
name: prod
application.yml文件分為四部分,使用 ---
來作為分隔符花履,第一部分通用配置部分并蝗,表示三個環(huán)境都通用的屬性撬统, 后面三段分別為:開發(fā)郑气,測試,生產(chǎn)瓦阐,用spring.profiles指定了一個值(開發(fā)為dev涮瞻,測試為test便脊,生產(chǎn)為prod)搀暑,這個值表示該段配置應(yīng)該用在哪個profile里面沥阳。
如果我們是本地啟動,在通用配置里面可以設(shè)置調(diào)用哪個環(huán)境的profil自点,也就是第一段的spring.profiles.active=XXX桐罕, 其中XXX是后面3段中spring.profiles對應(yīng)的value,通過這個就可以控制本地啟動調(diào)用哪個環(huán)境的配置文件,例如:
spring:
profiles:
active: dev
表示默認(rèn) 加載的就是開發(fā)環(huán)境的配置桂敛,如果dev換成test功炮,則會加載測試環(huán)境的屬性,以此類推术唬。
注意:如果spring.profiles.active沒有指定值死宣,那么只會使用沒有指定spring.profiles文件的值,也就是只會加載通用的配置碴开。
啟動參數(shù)
如果是部署到服務(wù)器的話,我們正常打成jar包,啟動時通過 --spring.profiles.active=xxx
來控制加載哪個環(huán)境的配置博秫,完整命令如下:
java -jar xxx.jar --spring.profiles.active=test 表示使用測試環(huán)境的配置
java -jar xxx.jar --spring.profiles.active=prod 表示使用生產(chǎn)環(huán)境的配置
使用多個yml配置文件進(jìn)行配置屬性文件
我們也可以使用多個yml來配置屬性潦牛,將于環(huán)境無關(guān)的屬性放置到application.yml文件里面;通過與配置文件相同的命名規(guī)范挡育,創(chuàng)建application-{profile}.yml文件 存放不同環(huán)境特有的配置巴碗,例如 application-test.yml 存放測試環(huán)境特有的配置屬性,application-prod.yml 存放生產(chǎn)環(huán)境特有的配置屬性即寒。
通過這種形式來配置多個環(huán)境的屬性文件橡淆,在application.yml文件里面spring.profiles.active=xxx
來指定加載不同環(huán)境的配置,如果不指定,則默認(rèn)只使用application.yml屬性文件母赵,不會加載其他的profiles的配置逸爵。
2. 使用properties文件
如果使用application.properties進(jìn)行多個環(huán)境的配置,原理跟使用多個yml配置文件一致凹嘲,創(chuàng)建application-{profile}.properties文件 存放不同環(huán)境特有的配置师倔,將于環(huán)境無關(guān)的屬性放置到application.properties文件里面,并在application.properties文件中通過spring.profiles.active=xxx
指定加載不同環(huán)境的配置周蹭。如果不指定趋艘,則默認(rèn)加載application.properties的配置疲恢,不會加載帶有profile的配置。
二瓷胧、Maven Profile
如果我們使用的是構(gòu)建工具是Maven显拳,也可以通過Maven的profile特性來實(shí)現(xiàn)多環(huán)境配置打包。
pom.xml配置如下:
<profiles>
<!--開發(fā)環(huán)境-->
<profile>
<id>dev</id>
<properties>
<build.profile.id>dev</build.profile.id>
</properties>
<!--默認(rèn)環(huán)境-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--測試環(huán)境-->
<profile>
<id>test</id>
<properties>
<build.profile.id>test</build.profile.id>
</properties>
</profile>
<!--生產(chǎn)環(huán)境-->
<profile>
<id>prod</id>
<properties>
<build.profile.id>prod</build.profile.id>
</properties>
</profile>
</profiles>
<build>
<finalName>${project.artifactId}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources.${build.profile.id}</directory>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
通過執(zhí)行 mvn clean package -P ${profile}
來指定使用哪個profile搓萧。