Maven 多環境配置

在開發過程當中每每會有多種環境,如開發環境、測試環境、生產環境等等。若是將配置文件寫在一個文件裏,在不一樣環境時手動切換,這無疑是繁瑣的,也是不智能的spring

Maven 工程的多環境配置

3個核心點:app

  1. 建立主配置文件,裏面是須要的配置項,不過屬性值採用 ${xxx} 形式書寫
  2. 建立不一樣環境的值文件,裏面是須要動態加載到主配置文件的具體值
  3. 在 pom.xml 中配置 profile

1.主配置文件

爲便於演示,這裏只在 src/main/resources 目錄下建立一個名爲 application.properties 的配置文件,具體以下:maven

application.name=${application.name}
複製代碼

2.不一樣環境值文件

src/main 目錄下建立一個 properties 文件夾,並在 properties 文件夾下分別建立 application-dev.propertiesapplication-prod.properties ,具體以下:測試

  1. application-dev.properties
application.name=application-dev
複製代碼
  1. application-prod.properties
application.name=application-prod
複製代碼

3.pom 文件

<build>
    <filters>
        <!-- 這裏的文件名必須與多環境配置文件的文件名相同, ${env} 會動態獲取不一樣環境 -->
        <!-- 假如激活 dev 環境, 這時對應的文件就是 src/main/properties/application-dev.properties -->
        <filter>src/main/properties/application-${env}.properties</filter>
    </filters>
    <resources>
        <resource>
            <!-- 能夠理解爲真正的配置文件所在的目錄 -->
            <directory>src/main/resources</directory>
            <!-- 是否替換資源中的屬性, 設置爲 true 才能實現動態替換 -->
            <filtering>true</filtering>
        </resource>
    </resources>
</build>
<profiles>
    <!-- 環境一 -->
    <profile>
        <!-- 使用 mvn package 打包時, -P 指定 profile 的輸入值就是此 id -->
        <!-- id 能夠隨便命名, 不能重複, 能夠與 env 相同, 這裏演示特地與 env 不一樣 -->
        <id>develop</id>
        <properties>
            <!-- env 必須與文件的後綴一致(application-${env}.properties) -->
            <!-- 其中 env 這個標籤也能夠自定義, 沒有強制要求必須是 env, 但必須與上面 application-${env}.properties 的 ${} 裏的值一致 -->
            <env>dev</env>
        </properties>
        <!-- 不指定環境則默認 dev 環境, 能夠放在任一個環境下, 但不能在多個環境中指定 -->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>

    <!-- 環境二 -->
    <profile>
        <id>product</id>
        <properties>
            <env>prod</env>
        </properties>
    </profile>
</profiles>
複製代碼

演示

  1. 直接執行 mvn clean package -Dmaven.test.skip=true,此時打包後的 application.properties 內容以下:ui

    application.name=application-dev
    複製代碼

    注意這裏並無指定 profile,但咱們設置了默認環境爲 dev,因此 application-dev.properties 的值就打進了 application.propertiesspa

  2. 執行 mvn clean package -Pproduct -Dmaven.test.skip=true,此時打包後的 application.properties 內容以下:code

    application.name=application-prod
    複製代碼

    注意 -P 指定的 profilepom.xml 裏配置的 profile id,而不是標籤 env 對應的值server

  3. 若是將 build:resources:resource:filtering 標籤註釋掉,或者設置爲 false,此時打包後的 application.properties 內容以下:xml

    application.name=${application.name}
    複製代碼

    因此若是要經過 profile 動態加載配置文件,build:resources:resource:filtering 標籤必定要設置爲 trueip

Spring Boot 的多環境配置

相比與普通 Maven 工程,Spring Boot 多環境配置更快捷

1.主配置文件

src/main/resources 目錄下建立 application.propertiesapplication.yml ,這裏建立 application.yml,內容以下:

spring:
 profiles:
 active: @profileActive@
複製代碼

2.不一樣環境值文件

src/main/resources 目錄下建立 application-dev.yml,內容以下:

server:
 port: 8088
複製代碼

src/main/resources 目錄下建立 application-prod.yml,內容以下:

server:
 port: 8099
複製代碼

3.pom 文件

<profiles>
    <profile>
        <!-- profile id, 打包時指定使用 -->
        <id>dev</id>
        <properties>
            <profileActive>dev</profileActive>
        </properties>
        <!-- 默認激活 dev 環境 -->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <profileActive>prod</profileActive>
        </properties>
    </profile>
</profiles>
複製代碼

能夠發現 Spring Boot 的 pom 文件不須要配置 build 標籤就能夠工做,比普通 Maven 工程更友好

相關文章
相關標籤/搜索