- 浏览: 219541 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 986http://www.blogjava.net/lishunl ... -
maven常见问题问答
2011-11-16 13:24 751前言 Maven,发音是[`meivin],"专家 ... -
maven setting.xml配置说明
2011-11-16 12:43 1410setting.xml view plain ... -
Maven实战指南:“打包”的技巧
2011-10-11 10:13 2092http://tech.it168.com/a2011/062 ... -
M2工程 mvn deploy 401 403错误处理
2011-10-10 15:11 1117http://hi.baidu.com/g4_gc/blog ... -
maven部署web工程基础步骤
2011-10-10 12:43 20441.准备工作 下载maven(url:http://a ... -
eclipse maven wtp jar/lib deploy
2011-10-09 09:57 1013eclipse工程(with maven & wtp) ... -
配置Maven web项目
2011-09-13 16:00 9371、创建Web应用 mvn archetype:genera ... -
maven报错:mvn deploy
2011-09-09 14:01 1683一.Error deploying artifact: ... -
maven配置篇之pom.xml
2011-09-08 15:24 808说完了settings.xml配置, ... -
简述maven中的profiles
2011-09-08 15:06 996Profiles是maven的一个很关键的术语:profile ... -
maven项目添加jar包.
2011-08-16 09:31 1153很多新手都不知道如何在maven项目里添加jar包. 以前我还 ... -
Hudson+Maven+SVN 快速搭建持续集成环境
2011-05-26 14:09 1015原: http://www.blogjava.net ... -
基于maven和hudson打造持续集成环境
2011-05-26 12:58 1113对持续集成的需求 对持续集成的需求主要来自项目过程的痛,在 ... -
maven 配置篇 之 settings.xml
2011-05-24 20:36 875maven2 比起maven1 来说,需要配置的文件少多了,主 ... -
Maven生命周期详解
2011-05-24 17:47 680Maven强大的一个重要的 ... -
激活Maven profile的几种方式
2011-05-24 17:43 850首先简单介绍下 Maven 的 profile 是什么。对于人 ... -
使用maven-sql-plugin实现持续数据库集成(CDBI)
2011-05-24 17:41 945数据库持续集成(Continuous Database Int ... -
Maven最佳实践:版本管理
2011-05-24 16:32 818原文:http://juvenshun.iteye ... -
Maven仓库
2011-05-24 16:30 865什么是Maven仓库 在不用Maven的时候,比如说以前我们 ...
相关推荐
同时,我们还可以在 Profile 中定义其他环境的配置,例如测试环境和生产环境。 在 Maven 中,我们可以使用资源文件来存储环境相关的配置信息。这些资源文件可以存储在 `src/main/resources` 目录下。为了区分不同的...
Profile测试则是对蓝牙设备进行的功能性测试,它基于各种蓝牙应用配置文件(Profile)进行测试,保证设备在特定功能和应用上符合蓝牙技术标准。Profile测试通常包括对蓝牙设备的配对、连接、数据传输等操作的测试,...
profile和bashrc比较测试, 结论:bashrc文件可以在nologging状态下生效,而profile文件不可以
-- 这里可以定义测试环境特有的依赖、插件和配置 --> </profile> <profile> <id>prod <name>env <value>prod <!-- 这里可以定义生产环境特有的依赖、插件和配置 --> </profile> ``` 激活Profile的...
6. **helloProfile的用途**:通常,`helloProfile`可能用于配置特定的测试环境,比如连接不同的数据库,或者包含特定的测试数据集。你可以根据项目需求,自定义`helloProfile`来满足各种自动化测试场景。 总结来说...
在Spring Boot中,Profile配置是一项强大的特性,它允许我们在不同的环境下使用不同的配置,例如开发、测试和生产环境。本文将深入探讨Spring Boot中Profile的使用,并通过源码示例进行详细解析。 首先,理解...
在pom.xml文件中,可以使用profiles节点和resources节点来实现环境隔离。 Maven环境隔离的优点是可以避免人工修改的错误,轻松地进行环境编译、打包和部署。同时,也可以根据不同的环境选择不同的配置文件,使得...
比如,我们可以在生产环境中启用代码混淆插件,而在开发和测试环境中则不需要。 激活Profile有多种方式:通过命令行参数 `-P`,在POM.xml中使用`activeProfiles`,或者通过Maven的settings.xml文件。例如,如果我们...
《ADRV9008-x-ADRV9009-profile-config-tool-filter-wizard-v2.4.zip》是一个关于ADRV9008和ADRV9009射频收发器配置工具的压缩包,其中包含了一份用户指南和一个名为“FilterWizard_v2.4”的软件。这个工具主要用于...
在本案例中,我们将深入探讨如何使用`@Profile`注解以及结合Maven来实现多环境配置。 首先,`@Profile`注解用于标记一个类或方法,表示该类或方法只在指定的环境中生效。例如,我们可以为开发环境创建一个`...
首先,在pom.xml文件中添加profile节点信息,以指定不同的环境 Profile,例如开发环境、测试环境、预演环境和生产环境等。每个Profile都可以包括不同的配置信息,例如数据库连接信息、日志配置信息等。 其次,在...
本文介绍了如何使用 SpringBoot 和 Maven 实现多环境配置文件夹解决方案,使用 Profile 功能来加载不同的配置文件,使用 Resources 和 Filter 来指定打包内容和替换变量,选择当前环境,加载对应的配置文件。
配置profile实现测试生产环境分离需要测试环境包时候gradlew assembleRelease-Dprofile=test (可加可不加) 如果需要别的环境gradlew assembleRelease -Dprofile=所对应的环境
SpringBoot在开发过程中,往往需要面对多个环境,如开发环境(Development)、测试环境(Testing)和生产环境(Production)。为了方便地在这些环境中切换配置,避免频繁手动修改配置文件,SpringBoot结合Maven的`...
PROFILE-测试及判读标准,监测PCB元件的温度,保证焊锡炉以最佳的参数设定连续地工作运行
Linux 环境变量配置文件 profile。。
在Linux系统中,环境变量和命令的设置是通过配置文件来完成的,这些配置文件包括`/etc/profile`, `/etc/bashrc`, `~/.bash_profile`以及`~/.bashrc`。理解它们的区别和联系对于优化用户环境和个性化设置非常重要。 ...
ICC(International Color Consortium)Profile,即国际色彩联盟配置文件,是色彩管理的核心,它用于确保不同设备间颜色的一致性和准确性。在数码打样过程中,正确使用ICC Profile至关重要,因为它能够保证从显示器...
以下是一个简单的示例,展示如何使用Profile功能测试两个不同函数的执行时间: - **函数1**:`Print100Hello`,打印100次“Hello”。 - **函数2**:`Print1000Hello`,打印1000次“Hello”。 从上面的示例输出可以...
.profile(由Bourne Shell和Korn Shell使用)和.login(由C Shell使用)两个文件是.bash_profile的同义词,目的是为了兼容其它Shell。在Debian中使用.profile文件代 替.bash_profile文件。 2..bashrc文件会在bash shell...