借助Maven为项目划分development,test,production环境

原文地址:http://melin.iteye.com/blog/1339060

很早学习rails的时候,rails在服务器启动的时候,通过参数可以切换不同运行环境。也许spring从rails吸取了这样的功能,从spring3.1就提供了profile功能,方便我们为不同的profile使用不同的bean。能够想到的应用场景就是数据源的配置,在production profile中,可能通过jndi获取数据源,而在开发环境中配置jndi比较费事,使用durid配置数据源,项目发布的时候需要修改数据源的配置,比较麻烦,如果忘记修改就更惨了。 为了解决这样相关的问题,这里使用maven profile和maven resource plugin为项目提供profile功能。 

spring profile实例: 

  1. <beans profile="development">  
  2.    <bean id="dataSource-mysql" class="com.alibaba.druid.pool.DruidDataSource"    destroy-method="close">  
  3.        <property name="url">  
  4.            <value>jdbc:mysql://192.168.1.100/druid-test</value>  
  5.        </property>  
  6.        <property name="username">  
  7.            <value>admin</value>  
  8.        </property>  
  9.        <property name="password">  
  10.            <value>adminpassword</value>  
  11.        </property>  
  12.        <property name="initialSize">  
  13.            <value>1</value>  
  14.        </property>  
  15.        <property name="maxActive">  
  16.            <value>20</value>  
  17.        </property>  
  18.    </bean>  
  19. </beans>  
  20.   
  21.   
  22. <beans profile="production">  
  23.     <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/datasource"/>  
  24. </beans>  

这里我主要解决项目中三个应用场景: 
1:资源文件配置,每个环境下的属性值可能不同 
2:日志文件配置,开发环境下日志只需要在控制台显示,而production profile中是需要打到日志文件中。 
3:使用maven切换spring profile。 

完成上述功能,最主要是在pom.xml文件中添加如下一段配置: 

  1.      <resources>  
  2. <resource>  
  3.     <directory>src/main/resources</directory>  
  4.             <filtering>true</filtering>  
  5. </resource>  
  6.     </resources>  

这样maven搜索src/main/resources下的所有文件,替换有类似这样变量${profiles.active}的值,其中profiles.active中的值是配置pom.xml文件,如下: 

  1. <profiles>  
  2.         <profile>    
  3.             <id>development</id>    
  4.             <activation>    
  5.                 <activeByDefault>true</activeByDefault>    
  6.             </activation>  
  7.             <properties>  
  8.                 <profiles.active>development</profiles.active>  
  9.             </properties>  
  10.         </profile>  
  11.         <profile>    
  12.             <id>test</id>    
  13.             <properties>  
  14.                 <profiles.active>test</profiles.active>  
  15.             </properties>  
  16.         </profile>  
  17.         <profile>    
  18.             <id>production</id>    
  19.             <properties>  
  20.                 <profiles.active>production</profiles.active>  
  21.             </properties>  
  22.         </profile>  
  23.     </profiles>  

上面配置三种profile,默认激活development profile。 

为了解决资源文件的问题,我们提供三个资源文件,命名如下。logback-和.xml中间的值为profiles.active的值。 

  1. logback-development.xml  
  2. logback-production.xml  
  3. logback-test.xml  

spring property-placeholder引用资源文件的方式如下。 

  1. <context:property-placeholder location="classpath:/META-INF/res/resource-${profiles.active}.properties" />  

为了解决日志文件的问题,这里使用了logback,和资源文件一样提供四个配置文件。 

  1. logback-development.xml  
  2. logback-production.xml  
  3. logback-test.xml  

在classpath下添加logback.xml。logback默认加载classpath下的logback.xml文件,配置内容如下: 

  1. <configuration>  
  2.     <include resource="/META-INF/logback/logback-${profiles.active}.xml"/>  
  3. </configuration>  

激活spring profile,只要在web.xml中添加如下配置: 

    1. <context-param>  
    2.         <param-name>spring.profiles.active</param-name>  
    3.         <param-value>${profiles.active}</param-value>  
    4.     </context-param>  
时间: 2024-11-05 17:34:47

借助Maven为项目划分development,test,production环境的相关文章

关于maven多项目之间的引用问题

问题描述 关于maven多项目之间的引用问题 现在是我的test-rop maven web中想引用 api接口中的一个server方法 我如何建立依赖关系才能引用到呢?我将api建到了web的依赖中了 但是还是引不到 这是我web的pom.xml中引用的配置 是通过maven生成的 <dependency> <groupId>com-lyl-base-api</groupId> <artifactId>com-lyl-base-api</artifa

异常-maven创建项目报错,哪位大牛帮忙看一下。

问题描述 maven创建项目报错,哪位大牛帮忙看一下. 创建maven时候告诉我无法创建,提示我jar包版本有问题吧?公司刚用,我也是刚学,求指导,具体错误见图片! 解决方案 那个插件换个低一点的版本,仓库里找不到 解决方案二: maven环境没配置好,主要是检查你的配置环境.然后查看eclipse上是不是设置了引用maven仓库的jar包呢?

[Maven实战](3)Maven创建项目

前两篇文章我们已经大概了解并安装好了Maven.现在我们开始使用Maven创建项目,在此我们创建一个最简单的Hllo World项目.让我们对Maven有一个初步的认识,对于其中的诸多要点与疑点,以后文章中慢慢一起学习.所以这篇文章主要是让我们对Maven创建项目的流程有一个大概的了解. 1. Maven项目目录结构 2. 主代码 默认情况下项目主代码位于src/main/java目录下,遵循这个约定,创建该目录,然后在该目录下创建文件com/sjf/model/helloworld.java

webapp-在命令提示符下使用MAVEN创建项目失败

问题描述 在命令提示符下使用MAVEN创建项目失败 使用maven3.3.1,输入如下命令建立web项目时出错 mvn archetype:create -DgroupId=oschina -DartifactId=simple -DpackageName=net.oschina.simple -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false 解决方案 mvn archetype:create -Dgroup

maven管理项目添加deployment 有时可以有时jsp找不到jar已然报错

问题描述 maven管理项目添加deployment 有时可以有时jsp找不到jar已然报错 Multiple annotations found at this line: - Syntax error, insert ";" to complete Statement - Syntax error, insert ")" to complete MethodInvocation - Line breakpoint:dict.jsp [line: 84] 这种情况

maven-可以通过Maven把项目下的文件夹定义下来吗?

问题描述 可以通过Maven把项目下的文件夹定义下来吗? 可以通过Maven把项目下的文件夹定义下来吗? 可以通过Maven把项目下的文件夹定义下来吗? 可以通过Maven把项目下的文件夹定义下来吗? 解决方案 没试过,更新的话可以

Maven web 项目`@Override must override a superclass method` 问题解决

问题 在 eclipse 中开发 Maven web 项目时出现 @Override must override a superclass method 问题 原因: 是 JDK 版本过低不支持 @Override 注解导致的,提高版本到 1.5 之后(不含1.5)就可以了. 解决方法: 首先,升级本机的 JDK 将 window->preferences->java-compiler中的Compiler compliance level 修改为 高版本 右键项目->Properties

eclipse运行maven+ssm项目中报错。

问题描述 eclipse运行maven+ssm项目中报错. 四月 18, 2016 5:37:15 下午 org.springframework.context.support.AbstractApplicationContext refresh 警告: Exception encountered during context initialization - cancelling refresh attempt org.springframework.beans.factory.BeanCre

spring mvc-Spring mvc+mybatis+maven的项目tomcat启动的时候,控制台不输出xml文件的加载信息

问题描述 Spring mvc+mybatis+maven的项目tomcat启动的时候,控制台不输出xml文件的加载信息 2014-3-17 9:52:18 org.apache.catalina.core.AprLifecycleListener init信息: Loaded APR based Apache Tomcat Native library 1.1.24 using APR version 1.4.6.2014-3-17 9:52:18 org.apache.catalina.co