我這是一個標准的maven的目錄結構,配置文件都在src/main/resources根目錄下。因為要改成多環境的配置,所以只有properties的文件改變了(公共配置可以原地不動)
1.將配置文件放到不同的文件夾下
2.創建2個不同的profile,一個是生產環境配置(prod),一個是開發環境配置(dev),分別與步驟1中的兩個文件夾名對應一致
<profiles>
<!-- 不同環境的配置代碼 -->
<profile>
<id>dev</id>
<properties>
<package.environment>dev</package.environment>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<package.environment>prod</package.environment>
</properties>
</profile>
</profiles>
3.設置變量
<package.environment>dev</package.environment>
4.對resources下的目錄進行處理
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>prod/*</exclude>
<exclude>dev/*</exclude>
</excludes>
</resource>
</resources>
上面那個filtering,之前看別人的示例是true。發現這樣的話,springContext.xml中類似{url}、{filters}(druid連接池的屬性,本來用prod/jdbc.properties和dev/jdbc.properties的配置)就變成了pom.xml中url的屬性值了(替換成了http://maven.apache.org)
5. maven-war-plugin的配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
<warName>${project.artifactId}</warName>
<webResources>
<resource>
<directory>src/main/resources/${package.environment}</directory>
<targetPath>WEB-INF/classes</targetPath>
<filtering>true</filtering>
</resource>
</webResources>
</configuration>
</plugin>
上面的${project.artifactId}是pom.xml的內置屬性,${package.environment}是定義的屬性
6.打包
打包之前別忘了update下project,因為pom.xml已經被修改過了
選擇項目路徑,填好打包命令(我是用的eclipse,所以省略了mvn的字樣)
package -P dev 就是用開發環境的配置,package -P prod就是用生產環境的配置
打包成功后,看包結構,雖然也有dev/prod兩個文件,但在src/main/resources根目錄下已經生成了那三個配置文件,而我web.xml也只是加載了 src/main/resources根目錄的配置文件,所以dev和prod對項目本身沒有沖突
=================================================================
但是這樣的話,eclipse在本地調試的話,沒法用tomcat啟動,所以改成用maven的tomcat來進行啟動
(tomcat7的命令是 tomcat7:run)
1.配置maven的tomcat插件
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>80</port>
<path>/fitness</path>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>
上面我用到了80的端口,用的tomcat7
2.在依賴中不能添加tomcat的依賴包
3.對javax.servlet-api和javaee-api的scope要加限制,限制成provided
如下:
這樣通過命令就能啟動了
參考:https://blog.csdn.net/chenjing928/article/details/79883104