Like Share Discussion Bookmark Smile

J.J. Huang   2019-03-21   Spring Boot   瀏覽次數:

SpringBoot - 第十一章 | 多環境配置

在前面關於Spring Boot「配置說明」花了三個章節來做介紹和教學,分別是 第六章 - SpringBoot配置說明(一)第七章 - SpringBoot配置說明(二) 第八章 - SpringBoot配置說明(三) ,說明了在開發的階段會需要設定基本的屬性或是自定義的屬性,而且通常會被應用和安裝到幾個不同的環境上,比如:開發(dev)、測試(test)、生產(prod)…等,其中對應的每個環境的資料庫地址、伺服器port等等配置都會不同,如果在為不同環境打包時都要頻繁修改配置文件的話,那必將是個非常繁瑣且容易發生錯誤。

maven的多環境配置

在沒有使用過Spring Boot的多環境配置時,是用maven的profile功能進行多環境配置。

  • maven配置pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<profiles>
       <profile>
          <id>dev</id>
          <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
               <pom.port>8080</pom.port>
            </properties>
       </profile>
       <profile>
          <id>test</id>
            <properties>
               <pom.port>8888</pom.port>
            </properties>
       </profile>
    </profiles>
    <build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*</include>
            </includes>
        </resource>
        <resource>
            <directory>${project.basedir}/src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
            </includes>
            <!-- 加入此屬性,才會進行過濾 -->
            <filtering>true</filtering>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                <encoding>utf-8</encoding>
                <!-- 需要加入,因為maven預設的是${},而springbooot 預設會把此替換成@{} -->
                <useDefaultDelimiters>true</useDefaultDelimiters>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    </build>
  • 設定 application.properties
1
server.port=${pom.port}
  • 執行編譯
1
mvn clean install -DskipTests -Ptest

-Ptest表示編譯為測試環境,對應<profile>下的<id>test</id>


Spring Boot 多環境配置

在Spring Boot中多環境配置文件名需要滿足application-{profile}.properties的格式,其中{profile}對應你的環境標示

  • application-dev.properties:開發環境
  • application-test.properties:測試環境
  • application-prod.properties:生產環境

而決定使用哪種環境的的配置文件,需要在application.properties中通過spring.profiles.active屬性來設定,其值對應{profile}值。

1
2
# 指定dev開發環境
spring.profiles.active=dev

spring.profiles.active=dev 就會載入 application-dev.properties 配置文件内容

簡單測試

  1. 新增三個環境的配置文件application-dev.properties、application-test.properties、application-prod.properties

  2. 三個配置文件設定server.port屬性,dev = 6666 、 test = 7777 、 prod = 8888

  3. application.properties 設定 spring.profiles.active=dev,表示預設為dev環境設定

  • 測/試不同配置的加載
1
2
3
1. 執行java -jar xxx.jar,port被設定為6666,預設的開發環境(dev)
2. 執行java -jar xxx.jar --spring.profiles.active=test,port被設定為7777,測試環境的配置(test)
3. 執行java -jar xxx.jar --spring.profiles.active=prod,port被設定為8888,生產環境的配置(prod)
  • 最後總結一下多環境的配置思路:
1
2
3
1. application.properties中配置通用內容,並設定spring.profiles.active=dev,以開發環境為預設配置
2. application-{profile}.properties中配置各個環境不同的內容
3. 通過指令行去使用不同環境的配置