SpringBoot 2.0 多環境yml文件配置

一、使用Spring Boot Profiles

1. 使用yml文件

首先,我們先創建一個名爲 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文件分爲四部分,使用 --- 來作爲分隔符,第一部分通用配置部分,表示三個環境都通用的屬性, 後面三段分別爲:開發,測試,生產,用spring.profiles指定了一個值(開發爲dev,測試爲test,生產爲prod),這個值表示該段配置應該用在哪個profile裏面。

如果我們是本地啓動,在通用配置裏面可以設置調用哪個環境的profil,也就是第一段的spring.profiles.active=XXX, 其中XXX是後面3段中spring.profiles對應的value,通過這個就可以控制本地啓動調用哪個環境的配置文件,例如:

spring:
    profiles:
        active: dev

表示默認 加載的就是開發環境的配置,如果dev換成test,則會加載測試環境的屬性,以此類推。

注意:如果spring.profiles.active沒有指定值,那麼只會使用沒有指定spring.profiles文件的值,也就是隻會加載通用的配置。

啓動參數
如果是部署到服務器的話,我們正常打成jar包,啓動時通過 --spring.profiles.active=xxx 來控制加載哪個環境的配置,完整命令如下:

java -jar xxx.jar --spring.profiles.active=test 表示使用測試環境的配置

java -jar xxx.jar --spring.profiles.active=prod 表示使用生產環境的配置

使用多個yml配置文件進行配置屬性文件
我們也可以使用多個yml來配置屬性,將於環境無關的屬性放置到application.yml文件裏面;通過與配置文件相同的命名規範,創建application-{profile}.yml文件 存放不同環境特有的配置,例如 application-test.yml 存放測試環境特有的配置屬性,application-prod.yml 存放生產環境特有的配置屬性。

通過這種形式來配置多個環境的屬性文件,在application.yml文件裏面spring.profiles.active=xxx來指定加載不同環境的配置,如果不指定,則默認只使用application.yml屬性文件,不會加載其他的profiles的配置。

2. 使用properties文件

如果使用application.properties進行多個環境的配置,原理跟使用多個yml配置文件一致,創建application-{profile}.properties文件 存放不同環境特有的配置,將於環境無關的屬性放置到application.properties文件裏面,並在application.properties文件中通過spring.profiles.active=xxx 指定加載不同環境的配置。如果不指定,則默認加載application.properties的配置,不會加載帶有profile的配置。

二、Maven Profile

如果我們使用的是構建工具是Maven,也可以通過Maven的profile特性來實現多環境配置打包。

pom.xml配置如下

<profiles>
        <!--開發環境-->
        <profile>
            <id>dev</id>
            <properties>
                <build.profile.id>dev</build.profile.id>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <!--測試環境-->
        <profile>
            <id>test</id>
            <properties>
                <build.profile.id>test</build.profile.id>
            </properties>
        </profile>
        <!--生產環境-->
        <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>

通過執行命令來指定使用哪個profile

mvn clean package -P ${profile} 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章