有時候,咱們在開發和部署的時候,有不少配置文件數據是不同的,好比鏈接mysql,鏈接redis,一些properties文件等等java
每次部署或者開發都要改配置文件太麻煩了,這個時候,就須要用到maven的profile配置了mysql
1,在項目下pom.xml的project節點下建立了開發環境和線上環境的profileredis
<profiles> <profile> <id>dev</id> <properties> <env>dev</env> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>prd</id> <properties> <env>prd</env> </properties> </profile> </profiles>
其中id表明這個環境的惟一標識,下面會用到
properties下咱們咱們本身自定義了標籤env,內容分別是dev和prd。spring
activeByDefault=true表明若是不指定某個固定id的profile,那麼就使用這個環境sql
2,下面是咱們resources下的目錄,有兩個目錄,dev和prd,在開發時,咱們使用dev下的配置文件,部署時候使用prd下的配置文件mvc
3配置pom.xml,若是直接install,那麼就會找到默認的id爲dev的這個profile,而後會在裏面找env的節點的值,maven
接着就會執行替換,至關於將src/main/resources/dev這個文件夾下的全部的配置文件打包到classes根目錄下。ide
<build> <finalName>springmvc2</finalName> <resources> <resource> <directory>src/main/resources/${env}</directory> </resource> </resources> </build>
在idea下指定打包時指定profile的idui
1第一步idea
2第二步
3第三步
4第四步,執行打包命令
這個時候target下springmvc項目下的classes根目錄下有了env.properties,而且裏面內容是咱們指定的那個env.properties,
可是發現resources下的aa.properties文件沒有被打包進去,那是由於咱們只指定了resources/prd下的文件打包到根目錄下,並無指定其餘文件
咱們在pom.xml下的resources節點下新增規則
<resource> <directory>src/main/resources</directory> <excludes> <exclude>dev/*</exclude> <exclude>prd/*</exclude> </excludes> </resource>
再執行打包就會將resources下的除了dev文件夾和prd文件夾的其餘全部文件打包到classes根目錄下了
最後注意:若是有其餘配置文件在src/main/java目錄下,也是能夠這樣指定的,可是要指定
<includes> <include>*.xml</include> </includes>
否則會將java類當配置文件一塊放到classes根目錄下,加了include就會只匹配符合條件的放到target的classes根目錄下
最後放個人全部的配置
<profiles> <profile> <id>dev</id> <properties> <env>dev</env> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>prd</id> <properties> <env>prd</env> </properties> </profile> </profiles> <build> <finalName>springmvc</finalName> <resources> <resource> <directory>src/main/java</directory> <includes> <include>*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <excludes> <exclude>dev/*</exclude> <exclude>prd/*</exclude> </excludes> </resource> <resource> <directory>src/main/resources/${env}</directory> </resource> </resources> </build>