- 浏览: 211399 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
Wangwei86609:
非常好的规则引擎框架,支持决策树和多线程运行规则https:/ ...
规则引擎 -
hzxlb910:
真详细,收藏哈
maven setting.xml配置说明 -
东方胜:
[b][/b]
脚本语言 Tcl -
345161974:
hyw520110 写道345161974 写道这个Visua ...
Visual Tcl Binary 完整版(完美中文支持) -
hyw520110:
345161974 写道这个Visual Tcl Binary ...
Visual Tcl Binary 完整版(完美中文支持)
Maven能够帮我们很好的管理测试,我们可以在 src/test/java 和 src/test/resources 下面使用JUnit或者TestNG 编写单元测试和集成测试,然后在命令行运行 mvn test ,测试就会自动运行,同时产生详细的测试报告。对只有一两个人的项目来说,不会碰到本文将提到的问题。
我们考虑以下场景(这也是我在实际项目中碰到的问题):有一个大概30人团队的项目,其中一半在美国,另一半在中国,要知道两个地方的网络连接速度不是很快,也就是说从地球的一端连接地球另一端的数据库十分耗时。中国的团队开发了一些模块,也很积极的编写了大量单元测试和集成测试(我这里说的单元测试使指不对外部任何环境有依赖),这些代码完全由Maven管理,所以在中国团队这里,持续集成服务器上只有简单的一条 mvn clean install 命令,一切都很好!但是,当美国团队签出同样的源代码,运行同样的命令时,问题出现了,测试在他们那里总是过不去,经过检查,发现代码中有太多的硬编码的数据库链接,以及其它的对外部环境的依赖。于是他们抱怨:How can you hardcode database link? 中国的同事很委屈:我们已经从代码里把这些东西抽取到配置文件里了,这不算Hardcode吧。大家暂时没办法,于是只能在build命令后加上-Dtest -DfailIfNoTests ,build可以过了,但是美国团队心里总是不舒服,尤其是当他们代码把测试弄坏时,他们经常不知道。
问题总是要解决的,更何况现在的问题也不小。让我们看看Maven为我们提供了什么,大家首先会想到的肯定是Profile,通过Profile,我们可以通过Maven传入一些个性化变量。考虑一下我们的情况下什么需要个性化?也就是说什么东西在不同的地方值是不一样的?答案是src/test/resources 下的一些资源文件,如JPA用到的 persistence.xml ,其中包含了这样的内容:
- <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
- <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test"/>
- <property name="hibernate.connection.username" value="test"/>
- <property name="hibernate.connection.password" value="test"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test"/> <property name="hibernate.connection.username" value="test"/> <property name="hibernate.connection.password" value="test"/>
我们看到这个资源文件绑定到了本机的mysql数据库上,我们需要从Maven传入这些参数,包括url, username和password。可问题是,通过Profile传输的个性化变量,我们能在pom.xml里面引用,我们如何在src/test /resources 下的资源文件里引用它们呢?
先别急,先让我们把Profile定义好,这里我选择在%M2_HOME%/conf 下的settings.xml 里定义全局的Profile,因为数据库链接是很多模块的测试都会用到的,定义如下:
- <profiles>
- <profile>
- <id>myProfile</id>
- <properties>
- <mysql.url>jdbc:mysql://localhost:3306</mysql.url>
- <mysql.username>test</mysql.username>
- <mysql.password>test</mysql.password>
- <mysql.dbname>test</mysql.dbname>
- </properties>
- </profile>
- </profiles>
- <activeProfiles>
- <activeProfile>myProfile</activeProfile>
- </activeProfiles>
<profiles> <profile> <id>myProfile</id> <properties> <mysql.url>jdbc:mysql://localhost:3306</mysql.url> <mysql.username>test</mysql.username> <mysql.password>test</mysql.password> <mysql.dbname>test</mysql.dbname> </properties> </profile> </profiles> <activeProfiles> <activeProfile>myProfile</activeProfile> </activeProfiles>
此外,修改资源文件如下:
- <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
- <property name="hibernate.connection.url" value="jdbc:mysql://${mysql.url}/${mysql.dbname}"/>
- <property name="hibernate.connection.username" value="${mysql.username}"/>
- <property name="hibernate.connection.password" value="${mysql.password}"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.connection.url" value="jdbc:mysql://${mysql.url}/${mysql.dbname}"/> <property name="hibernate.connection.username" value="${mysql.username}"/> <property name="hibernate.connection.password" value="${mysql.password}"/>
至此,我们已经把环境相关的变量隔离开了,每个用户都有自己的settings.xml 文件,所以每个人都能配置自己的settings.xml 来使用他想要使用的数据库。针对我们上面的场景,美国的团队只要在本地配置一个数据库,他们也就可以运行测试了,皆大欢喜!
最后,不要忘了配置 Maven Resources 插件让它开启 filtering 功能:
- [...]
- <resource>
- <directory>src/test/resources</directory>
- <filtering>true</filtering>
- </resource>
- [...]
[...] <resource> <directory>src/test/resources</directory> <filtering>true</filtering> </resource> [...]
至此,运行 mvn install ,Maven 会让 Resources 插件首先根据 setttings.xml 文件中的值填充测试资源文件中的变量,然后再运行测试。这种解决方案不仅仅适用于数据库,任何外部环境配置都可以使用该方案,如对消息服务器的依赖。尽情享受Maven给你带来的便利吧!
发表评论
-
Maven Artifacts如何部署到仓库
2012-03-28 11:50 936http://www.blogjava.net/lishunl ... -
maven常见问题问答
2011-11-16 13:24 718前言 Maven,发音是[`meivin],"专家 ... -
maven setting.xml配置说明
2011-11-16 12:43 1263setting.xml view plain ... -
Maven实战指南:“打包”的技巧
2011-10-11 10:13 2025http://tech.it168.com/a2011/062 ... -
M2工程 mvn deploy 401 403错误处理
2011-10-10 15:11 1064http://hi.baidu.com/g4_gc/blog ... -
maven部署web工程基础步骤
2011-10-10 12:43 19861.准备工作 下载maven(url:http://a ... -
eclipse maven wtp jar/lib deploy
2011-10-09 09:57 984eclipse工程(with maven & wtp) ... -
配置Maven web项目
2011-09-13 16:00 9091、创建Web应用 mvn archetype:genera ... -
maven报错:mvn deploy
2011-09-09 14:01 1615一.Error deploying artifact: ... -
maven配置篇之pom.xml
2011-09-08 15:24 756说完了settings.xml配置, ... -
简述maven中的profiles
2011-09-08 15:06 921Profiles是maven的一个很关键的术语:profile ... -
maven项目添加jar包.
2011-08-16 09:31 1114很多新手都不知道如何在maven项目里添加jar包. 以前我还 ... -
Hudson+Maven+SVN 快速搭建持续集成环境
2011-05-26 14:09 962原: http://www.blogjava.net ... -
基于maven和hudson打造持续集成环境
2011-05-26 12:58 1044对持续集成的需求 对持续集成的需求主要来自项目过程的痛,在 ... -
maven 配置篇 之 settings.xml
2011-05-24 20:36 832maven2 比起maven1 来说,需要配置的文件少多了,主 ... -
Maven生命周期详解
2011-05-24 17:47 651Maven强大的一个重要的 ... -
激活Maven profile的几种方式
2011-05-24 17:43 816首先简单介绍下 Maven 的 profile 是什么。对于人 ... -
使用maven-sql-plugin实现持续数据库集成(CDBI)
2011-05-24 17:41 911数据库持续集成(Continuous Database Int ... -
Maven最佳实践:版本管理
2011-05-24 16:32 762原文:http://juvenshun.iteye ... -
Maven仓库
2011-05-24 16:30 809什么是Maven仓库 在不用Maven的时候,比如说以前我们 ...
相关推荐
profile和bashrc比较测试, 结论:bashrc文件可以在nologging状态下生效,而profile文件不可以
配置profile实现测试生产环境分离需要测试环境包时候gradlew assembleRelease-Dprofile=test (可加可不加) 如果需要别的环境gradlew assembleRelease -Dprofile=所对应的环境
PROFILE-测试及判读标准,监测PCB元件的温度,保证焊锡炉以最佳的参数设定连续地工作运行
蓝牙5.0的测试以及认证测试的详细过程,细分 蓝牙资格认证 蓝牙技术联盟 基本情况 设计认证 RF测试 Profile测试
在maven中实现多环境的构建可移植性需要使用profile,通过不同的环境激活不同的profile来达到构建的可移植性。
.profile(由Bourne Shell和Korn Shell使用)和.login(由C Shell使用)两个文件是.bash_profile的同义词,目的是为了兼容其它Shell。在Debian中使用.profile文件代 替.bash_profile文件。 2..bashrc文件会在bash shell...
Linux 环境变量配置文件 profile。。
VsCode配置-profile
C++6.0中profile选项为灰色的解决办法,及profile的使用
SpringBoot中的Profile配置的使用示例源码
使用Profile Prism生成打印机配置文件的简单步骤 由于扫描仪及扫描软件,打印机及打印软件的品牌众多,设置也相互不同。建议在阅读完下面简单步骤后,继续了解后面的详细说明。 1.运行打印软件(能识别色彩配置文件...
软件软件性能测试-profile软件测试1.Profile的作用帮助你分析并发现程序运行的瓶颈,找到耗时所在,同时也能帮助你发现不会被执行的代码。从而最终实现程序的优化。2.Profile的组成Profile包括3个命令行工具:PREP,...
使用maven Profile实现多环境构建,详细请参考 :http://blog.csdn.net/u011781521/article/details/77899467
如何在Flex中使用profile的教程
linux配置jdk环境变量的文件。
主要介绍了使用maven profile指定配置文件打包适用多环境的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
基本介绍了如何使用 VC6.0的profile
/etc/profile 每个用户,首次登录时被执行; /etc/bashrc 每个运行bash shell的用户都执行此文件,当bsh被打开时,该文件被读取; ~/.bash_profile 专用于本用户的shell信息,仅被执行一次; ~/.bashrc 文件包含本...
这些配置文件可以根据不同的环境进行分离和管理,Spring Boot提供了多种灵活的方式来实现多环境配置。 1. 配置文件的命名 默认配置文件:application.properties(或application.yml) 环境特定配置文件:...
2.这个程序具体的内容我忘了,只知道使用@Profile@Configuration@RestController@Autowired(设置环境配置类控制类)等方法写的,具体实现的功能就是新建一些.yml和.java以及接口类文件,实现在.yml文件中配置指定要...