在進行web程序開發,如果項目組沒有使用自動化發布工具(jenkins + maven + svn + tomcat ),我們一般會使用maven的熱部署來完成發布,在部署的過程中我們開發,測試,生產環境的配置文件都是不一樣的,如果是手動改動配置文件,存在很大的隱患,本文使用profile來處理這個問題!
關於maven的profile配置的描述,
profile可以讓我們定義一系列的配置信息,然后指定其激活條件。這樣我們就可以定義多個profile,然后每個profile對應不同的激活條件和配置信息,從而達到不同環境使用不同配置信息的效果。比如說,我們可以通過profile定義在jdk1.5以上使用一套配置信息,在jdk1.5以下使用另外一套配置信息;或者有時候我們可以通過操作系統的不同來使用不同的配置信息,比如windows下是一套信息,linux下又是另外一套信息,等等。具體的激活條件有哪些我在后文會講到。
首先我們在/src/main/resources下建立三個配置文件
/src/main/resources/dev
/src/main/resources/test
/src/main/resources/pro
在pom.xml中
<profiles> <!-- 開發 默認激活 --> <profile> <id>dev</id> <properties> <env>dev</env> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <!-- 測試服務器 --> <profile> <id>test</id> <properties> <env>test</env> </properties> </profile> <!-- 生產服務器 --> <profile> <id>pro</id> <properties> <env>pro</env> </properties> </profile> </profiles>
接着在build里面寫上resources配置
<resources> <resource> <directory>${project.basedir}/src/main/resources/${env}</directory> <includes> <include>*.*</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resource</directory> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> </includes> <filtering>false</filtering> </resource> </resources>
tomcat7熱部署配置
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8088</port> <path>/maven</path> <uriEncoding>UTF-8</uriEncoding> <!-- 啟動tomcat熱部署 --> <url>http://127.0.0.1:8081/manager/text</url> <username>admin</username> <password>admin</password> </configuration> </plugin>
tomcat的tomcat-user.xml配置
<role rolename="admin-gui"/> <role rolename="manager-script"/> <role rolename="manager-gui"/> <user username="admin" password="admin" roles=" admin-gui , manager-gui,manager-script "/>
直接在maven界面的Goals
執行clean package -Ptest tomcat7:redeploy
即可以將應用發布到測試服務器,引用的配置文件是test下的配置文件
發布到正式環境只需要更改熱部署tomcat的url
執行clean package -Ppro tomcat7:redeploy
本地開發,默認加載執行的就是dev下配置文件