spring boot + maven使用profiles進行環境隔離
阿新 • • 發佈:2018-11-16
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
- application.properties中定義啟用的環境
- @[email protected]與maven中定義的profile保持一致
打包
run --> maven build... --> profile選擇對應的環境,如下圖則是打的生成的包
本地執行
通過spring boot引數覆蓋的方式執行啟用環境
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>