赞
踩
修改文件《pom.xml》
<profiles> <!-- 本地开发环境 --> <profile> <id>dev</id> <properties> <package.environment>dev</package.environment> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <!-- 测试环境 --> <profile> <id>qas</id> <properties> <package.environment>qas</package.environment> </properties> </profile> <!-- 灰度环境 --> <profile> <id>pre</id> <properties> <package.environment>pre</package.environment> </properties> </profile> <!-- 生产环境 --> <profile> <id>prd</id> <properties> <package.environment>prd</package.environment> </properties> </profile> </profiles>
这样只是配置好了结构和指定好了各个环境的文件所在位置,当启动时指定的环境下的配置文件还不能使用,需要配置一个插件,当在启动时把指定的环境的配置文件copy 到《spring-context.xml》引用的位置(4步)。我的spring 指定的位置是如下配置的位置(classpath 下):
<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <!--1--> <exclude>env/</exclude> </excludes> </resource> <resource> <directory>src/main/java</directory> <filtering>true</filtering> <includes> <!--2--> <include>**/*.xml</include> </includes> </resource> </resources>
- 在env/ 目录下的配置的是各个环境的配置文件,我们是不需要的,我们执行把需要的copy 到指定位置 如下(4步)。
- 把xml 文件打包进去(我这里是把mybatis 放到了java 下了)
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.2.0</version> <configuration> <escapeString>/</escapeString> <encoding>UTF-8</encoding> <nonFilteredFileExtensions> <nonFilteredFileExtension>en</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> <executions> <execution> <id>copy-resources</id> <!--在process-resources生命周期内执行--> <phase>process-resources</phase> <goals> <!--goal为copy-resources--> <goal>copy-resources</goal> </goals> <configuration> <!--copy目标目录--> <outputDirectory>target/classes</outputDirectory> <resources> <resource> <!--copy资源所在的目录--> <directory>src/main/resources/env/${package.environment}</directory> <targetPath></targetPath> <filtering>true</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin>
- 指定环境下的文件会覆盖掉目标(
<targetPath></targetPath>
= 默认是classpath=(<targetPath>${project.build.directory}/classes</targetPath>
)下存在的同名文件${package.environment}
这个变量即使上面<profile><properties>
标签中的<package.environment>
标签名,所以要改同时改掉。
再贴个tomcat 插件的配置吧
<!-- tomcat7 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
tomcat7:run -Dmaven.tomcat.port=9011 -P qas
如果在配置上面tomcat7插件时指定了端口好,那么命令中
-Dmaven.tomcat.port=9011
则无效,配置中优先级高于命令参数优先级。
其实第4步是可以省去的,但是要优化3 的配置,使指定环境配置文件copy到指定位置
<resource><!--1 --> <directory>src/main/resources</directory> <targetPath>${project.build.directory}/classes</targetPath> <filtering>true</filtering> <includes> <include>*</include> </includes> </resource> <resource><!--2--> <directory>src/main/resources/${package.environment}</directory> <targetPath>${project.build.directory}/classes</targetPath> <filtering>true</filtering> <includes> <include>*</include> </includes> </resource>
- 我们把公用的配置文件copy到指定位置(classpath)。
- 我们把指定环境的配置文件copy到指定位置(classpath)。
- 注意第2步的过程不会覆盖原来位置(此处指classpath)存在的同名文件。
<resources> <resource> <!-- 指定resources插件处理哪个目录下的资源文件 --> <directory>src/main/resources</directory> <!-- 打包后放在什么位置 --> <targetPath>${project.build.directory}/classes</targetPath> <!-- 不包含directory指定目录下的以下文件 --> <excludes> <exclude>pro/*</exclude> <exclude>dev/*</exclude> <exclude>test/*</exclude> </excludes> <!-- 只(这个字很重要)包含directory指定目录下的以下文件 <include>和<exclude>都存在的话,那就发生冲突了,这时会以<exclude>为准 --> <includes> <include></include> </includes> <!-- filtering为true的时候,这时只会对文件(<excludes>)中的占位符替换为真实值, filtering为false的时候,不会把占位付替换为真实值 --> <filtering>true</filtering> </resource> </resources>
. filtering 标签总会然人联想到和includes 、excludes有关系,网上搜了一些博客也是写的然人茫然,这个标签并不是对文件的限制,而是对文件内容替换变量的功能的一个开关。当为true 时会把移动过的文件中的变量用真实值(eg: *.properites中的值)替换掉。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。