#maven实现多环境配置
##场景
在开发中,我们会有多个环境:开发环境,测试环境,线上环境。可能每个开发人员都会有自己的环境。
每个环境的一些配置文件可能是不同的,
简单的如:每个环境的数据库账号和密码是不同的。
最笨的做法:如果每个开发人员的密码不同,我们会利用规范去统一密码,对于测试和线上环境,不可能做到一样,一些配置文件值在不同环境是不同的,如果每次在不同环境构建代码,需要
在每次提交代码的时候修改配置文件,这样会带来两个缺点:
- 可能在每次上线或进行测试的时候忘记修改配置值。
- 大量重复的劳动,不符合程序猿的提高生产力精神。
如果你觉的以上两点都没什么大不了,以下内容可以忽略。
##maven的profiles解决配置文件多环境
增加多环境目录
单环境下的配置文件:
marketking.properties是直接放在resources目录下。
多环境下,在reseouces下新建三个目录
- dev. 开发环境
- production 线上环境
- test 测试环境
把marketking.properties 移动到上面上个目录。
###pom.xml配置
####增加 profiles
增加 profiles (profiles与dependencies为兄弟关系)
<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>production</id>
<properties>
<env>production</env>
</properties>
</profile>
<profiles>
####增加 resources
在<build></build>增加子节点<resources></resources>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<!-- 资源根目录排除各环境的配置,使用单独的资源目录来指定 -->
<excludes>
<exclude>test/*</exclude>
<exclude>dev/*</exclude>
<exclude>production/*</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources/${env}</directory>
</resource>
</resources>
###mavne构建
如果要发布不同的环境的配置文件,使用一下命令
mvn clean package -Ptest //测试环境
mvn clean package -Pdev //开发环境
到这里你就可以,多个环境使用不同的配置文件,在结合jenkins,这效率。棒
IDEA查看当前使用的环境
##遇到的坑
启动项目之后,浏览器运行,一直报404错误 ,控制台输出:
No mapping found for HTTP request with URI [/] in DispatcherServlet with name 'springServlet’
并且接口可以访问。
根据信息,可能是路径问题并且与spring-mvc有关。查看web.xml,spring-mvc.xml 文件没有发现什么问题。
原因二:也是我的错误所在,就是把springmvc.xml放在了自己新建的文件夹里,然而这个文件夹是个 Source Folder ,当在web.xml里面 里面配置value的时候这样写才不会在启动tomcat的时候出现失败的情况:
忽然想起来,在开始进行配置的时候,把所有的配置文件都分别放了三个环境。最后只把marketking.properties 放在了三个环境。
之后对比其他稳定分支,发现在web.xml
被修改为了(IEAD行为):
classpath:/src/main/resources/spring-mvc.xml**
稳定分支web.xml
<servlet>
<servlet-name>springServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring-mvc*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
最后整个配置过程也很简单,但是由于关于maven的基础不是很扎实,并且对web.xml文件里细节都有点遗忘了。
还是那句话:万丈高楼平地起,勿在浮沙筑高台
参考:
http://www.cnblogs.com/of-course/p/6055311.html
http://blog.csdn.net/mn960mn/article/details/42421531
http://blog.csdn.net/mhmyqn/article/details/24501281