原文地址: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. <beans profile="production">
  21. <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/datasource"/>
  22. </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>

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

  1. Maven最佳实践 划分模块 配置多模块项目 pom modules

    所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作多模块,multi-module)相互关联.那么,为什么要这么做呢?我们明明在开发一 ...

  2. Maven学习3-使用Maven构建项目

    转自:http://www.cnblogs.com/xdp-gacl/p/4240930.html maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项 ...

  3. Maven学习总结(三)——使用Maven构建项目

    maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项目的过程. 一.构建Java项目 1.1.创建Java Project 1.使用mvn archet ...

  4. Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

    本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...

  5. 转】Maven学习总结(三)——使用Maven构建项目

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4240930.html 感谢! maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使 ...

  6. Maven学习(三)-- 使用Maven构建项目

    摘自:http://www.cnblogs.com/xdp-gacl/p/4240930.html maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项 ...

  7. (转)Maven学习总结(三)——使用Maven构建项目

    孤傲苍狼 只为成功找方法,不为失败找借口! Maven学习总结(三)——使用Maven构建项目 maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项目的 ...

  8. Eclipse中使用Maven创建项目 (转)

    转自:http://www.gogogogo.me/development/eclipse-maven-webapp.html       Apache Maven是一个优秀的项目构建和管理工具,许多 ...

  9. webpack中Development和Production模式的区分打包

    当我们在开发一个项目的时候,我们一般用development这个环境进行项目的开发,在这个环境下,webpack使用dev-server,帮我们启用一个服务器,然后这个服务器里面还集成了一些,比如hm ...

随机推荐

  1. Kail Linux渗透测试之测试工具Armitage

    Kali Linux下的Armitage是一个很强大的渗透工具,图形化操作页面,但我们把kali linux装在虚拟机里面,然后再启动armitage就会出现一个error,他会给你一个message ...

  2. linux c下输入密码不回显

    今天做一个登录程序,需要屏蔽掉密码,于是自己就在网上找资料,找到了一种和linux终端下输入密码方式相同的方法,不显示在终端,具体代码实现如下. #include<stdio.h> #in ...

  3. jenkins pipelines 简介

    1. 简介:A pipeline就是软件和质量保证进程中的一部分中的自动化连续操作.它可以看成是一连串的脚本. 操作组:就是把一系统的操作可以合成一个个的步骤,如果一个步骤失败,那么后续步骤便不会执行 ...

  4. <c:if></c:if>用法-转载

    <c:if test="value ne, eq, lt, gt,...."> 用法 类别 运算符 算术运算符 + . - . * . / (或 div )和 % (或 ...

  5. Python类总结-字段,方法,属性区别及StaticMethod, Property,私有字段和私有属性

    类包含下列 静态属性 动态属性 静态方法 动态方法 class Province: #静态字段--属于类,调用方法类.字段名 memo = "中国23个省之一" #动态字段--属于 ...

  6. Windows 消息循环(2) - WPF中的消息循环

    接上文: Windows 消息循环(1) - 概览 win32/MFC/WinForm/WPF 都依靠消息循环驱动,让程序跑起来. 本文介绍 WPF 中是如何使用消息循环来驱动程序的. 4 消息循环在 ...

  7. CF438 The Child and Sequence

    题意: 给定一个长度为n的非负整数序列a,你需要支持以下操作:1)给定l,r,输出a[l] + a[l+1] + ... + a[r] 2)给定l,r,x, 将a[l].a[l+1]......a[r ...

  8. windows 10 下安装python 2.7

    下载msi的安装包: https://www.python.org/ftp/python/2.7.8/python-2.7.8.msi [incorrect] PS C:\Python27> . ...

  9. 分割视图控制器(UISplitViewController)

    这种控制器只能用于iPad,它可以在iPad屏幕中显示两个不同的场景:在横向模式下,左边显示一个表,供用户选择:用户选择表中的元素后,详细视图将显示该元素的详细信息.如果iPad被旋转到纵向模式,表将 ...

  10. 【51Nod 1756】【算法马拉松 23】谷歌的恐龙

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1765 设答案为\(X\). 则\[X=\frac{m}{n}\times ...