Maven多環境切換及打包


對於環境的不同,需要配置的參數信息也是不同,所以SpringBoot提供了spring.profiles.avtive參數進行配置,但是通過手動修改參數的方式難免有些不方面,並且這個參數在每個環境都是不一樣的,並不能直接寫死,提交代碼的時候還容易遺忘是否改過了,為此SpringBoot提供了一種通過@占位符+Maven配置的方式來方便的切換工作環境。

首先spring.profiles.avtive是需要可以動態切換的,所以這里先使用一個@占位符來表示環境變量,如下

spring:
    profiles:
      active: @profileActive@

然后在pom.xml通過profiles定義需要的工作環境設置,我的配置如下

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <profileActive>dev</profileActive>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <profileActive>test</profileActive>
        </properties>
    </profile>
    <profile>
        <id>local</id>
        <properties>
            <profileActive>local</profileActive>
        </properties>
    </profile>
</profiles>

這里的 true 設置為默認環境,使用打包命令無需指定環境的profileActive

然后根據application-xx.yml的命名規則准備對應數量的配置文件,如

  • application-test.yml
  • application-dev.yml
  • application-local.yml

這里每個profile里的profileActive都和application.yml中的profileActive對應,這時候刷新Maven配置,在idea的Maven插件上會出環境選項,點擊箭頭所指的刷新按鈕即可更新Maven項目配置,但是要注意的是,每次切換之前記得通過 mvn clean 清除編譯的target,不然會提示關於profileActive之類的錯誤。

以及,需要在idea的spring插件的Active profiles設置 profiles 選項

開發時問題解決,那打包的時候我們也需要根據不同的環境打包,可以通過Maven進行環境打包

mvn clean package -P test //打包test環境
mvn clean package //不指定環境變量則使用默認profileActive,通過<activeByDefault>指定

這里就表示打包test環境的jar包,打包后解壓jar看application.yml的profileActive就變成了test

多余的配置文件我們是不需要的,一個環境只需要一個application-xx.yml,那么可以通過Maven配置resource的includes來排除其他的多余的配置文件,我的配置如下

<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
            </configuration>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.yml</include>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>application-${profileActive}.yml</include>
                <include>application.yml</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

這里的<include>application-${profileActive}.yml</include>配置即可只導入對應環境名稱的配置文件,其他環境的配置文件則會排除在外。

另外為了打包方便,也可以將mvn clean package -P xx命令編寫成一個bat或sh腳本,打包時直接調用即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM