咱們在進行項目的多環境配置時,有不少種方式供咱們選擇,好比 SpringBoot 自帶的 application-dev.yml、maven 的 profile 等。這裏介紹的就是如何利用 profile 進行多環境配置。redis
首先,在 pom.xml 中添加你須要的 profile 配置:spring
<profiles> <!-- 開發環境 默認激活--> <profile> <id>dev</id> <properties> <env>dev</env> </properties> </profile> <!-- 生產環境 --> <profile> <id>publish</id> <properties> <env>publish</env> </properties> </profile> <!-- 本地環境 --> <profile> <id>local</id> <properties> <env>local</env> </properties> <!--默認啓用--> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> </profiles>
profiles 裏面配置了多個 profile 文件,即 dev、publish、local 環境,<env> 標籤是爲了切換環境,激活不一樣的環境須要。<activeByDefault> 設置爲 true 代表:該 profile 是默認激活狀態。tomcat
接下來,咱們要將 resource 的 filtering 標籤設置爲 true,表示啓用參數化值來替換標記,而參數化值源於 filter 標籤中的 properties 文件。如下是原文解釋:app
Whether resources are filtered to replace tokens with parameterised values or not. The values are taken from the <code>properties</code> element and from the properties in the files listed in the <code>filters</code> element.
<build> <!-- 指定使用filter --> <filters> <filter>src/main/resources/profiles/${env}/env.properties</filter> </filters> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/**</include> </includes> <excludes> <exclude>profiles/**</exclude> </excludes> <filtering>true</filtering> </resource> </resources> </build>
filter 中引用了 profile 的 env 屬性,表示讀取哪一個環境變量的值,不一樣的 properties 文件中配置了不一樣環境的值:
maven
前面說到 <filtering>true</filtering> 表示啓用參數化值來替換標記,這是什麼意思呢?咱們來看看 application.yml 中要怎麼表示?工具
server: port: 8080 tomcat: max-threads: 800 uri-encoding: UTF-8 spring: redis: host: ${spring.redis.host} timeout: ${spring.redis.timeout} pool: max-idle: ${spring.redis.pool.max-idle} max-active: ${spring.redis.pool.max-active} password: ${spring.redis.password} database: ${spring.redis.database}
所以,整個流程應該是這樣進行的:執行 maven compile 命令, <resource> 讀取 <filter> 中 properties 的屬性值,而後替換 src/main/resources 下中的標記 — 諸如 ${spring.redis.host} 這些。ui
最後,只剩下一個問題了,怎麼切換環境呢?若是你開發的工具是 IDEA,直接在旁邊窗口切換便可:
若是使用命令行編譯,加上 -P 選擇 profile 便可,以下:命令行
clean -U package -P dev -DskipTests=true -f pom.xml