1. 程式人生 > >spring boot + maven使用profiles進行環境隔離

spring boot + maven使用profiles進行環境隔離

Spring Profile

Spring可使用Profile決定程式在不同環境下執行情況,包含配置、載入Bean、依賴等。
Spring的Profile一般專案包含:dev(開發), test(單元測試), qa(整合測試), prod(生產環境)。由spring.profiles.active屬性決定啟用的profile。
SpringBoot的配置檔案預設為 application.properties(或yaml,此外僅以properties配置為說明)。不同Profile下的配置檔案由application-{profile}.properties管理,同時獨立的 Profile配置檔案會覆蓋預設檔案下的屬性。

Maven Profile

Maven同樣也有Profile設定,可在構建過程中針對不同的Profile環境執行不同的操作,包含配置、依賴、行為等。
Maven的Profile由 pom.xml 的標籤管理。每個Profile中可設定:id(唯一標識), properties(配置屬性), activation(自動觸發的邏輯條件), dependencies(依賴)等。
此文章不對Spring和Maven的Profile作過多說明,詳細情況請自行查閱。

spring 多環境

maven增加profiles配置

<profiles>
        <profile>
            <id>dev</id>
            <properties>
                <!-- 環境標識,需要與配置檔案的名稱相對應 -->
                <profile>deve</profile>
            </properties>
            <activation>
                <!-- 預設環境 -->
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <profile>test</profile>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <profile>prod</profile>
            </properties>
        </profile>
    </profiles>

application.properties

[email protected]@

application-deve.properties

management.server.port=9001
management.endpoints.web.base-path=/monitor


management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env


management.endpoint.health.show-details=always

management.endpoint.beans.cache.time-to-live=10s

management.endpoints.web.cors.allowed-origins=http://example.com
management.endpoints.web.cors.allowed-methods=GET,POST

image

  • application.properties中定義啟用的環境
  • @[email protected]與maven中定義的profile保持一致

打包

run --> maven build... --> profile選擇對應的環境,如下圖則是打的生成的包
image

image

本地執行

通過spring boot引數覆蓋的方式執行啟用環境
image

image

2018-11-16 14:52:28.211  INFO 2068 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9001 (http) with context path ''
2018-11-16 14:52:28.223  INFO 2068 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2018-11-16 14:52:28.224  INFO 2068 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 2.179 seconds (JVM running for 2.587)

熱部署

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>true</scope>
            <optional>true</optional>
        </dependency>


<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork> <!-- 如果沒有該配置,devtools不會生效 -->
                </configuration>
            </plugin>
        </plugins>
    </build>