1什么是MavenProfile

在我们平常的java开发中,会经常使用到很多配制文件(xxx.properties,xxx.xml),而当我们在本地开发(dev),测试环境测试(test),线上生产使用(product)时,需要不停的去修改这些配制文件,次数一多,相当麻烦。现在,利用maven的filter和profile功能,我们可实现在编译阶段简单的指定一个参数就能切换配制,提高效率,还不容易出错.

profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。

2 Maven Profile入门

修改pinyougou-page-web的pom.xml

 <properties>

   <port>9105</port>

  </properties>

  <build>  

  <plugins>      

      <plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

<version>2.2</version>

<configuration>

<!-- 指定端口 -->

<port>${port}</port>

<!-- 请求路径 -->

<path>/</path>

</configuration>

     </plugin>

  </plugins>  

    </build>

那我们现在思考一下,如果这个端口在开发时使用9105,如果在生产环境(或其他环境)为9205呢?如何解决值的动态切换呢?运行tomcat7:run ,发现运行结果是一样的,因为port是变量,而变量值是定义为9105。这其实就是我们之前学习的maven的变量。

这时我们修改pom.xml,增加profile定义

  <profiles>

   <profile>

   <id>dev</id>

   <properties>

   <port>9105</port>

   </properties>

   </profile>

   <profile>

   <id>pro</id>

   <properties>

   <port>9205</port>

   </properties>

   </profile>  

  </profiles>

执行命令 tomcat7:run -P dev  发现以9105端口启动执行命令 tomcat7:run -P pro  发现以9205端口启动

-P 后边跟的是profile的id

如果我们只执行命令tomcat7:run ,也是以9105启动,因为我们一开始定义的变量值就是9105,就是在不指定profileID时的默认值.

3切换数据库连接配置

3.1编写不同环境的配置文件

(1)我们在pinyougou-dao工程中src/main/resources下创建filter文件夹

(2)filter文件夹下创建db_dev.properties ,用于配置开发环境用到的数据库

env.jdbc.driver=com.mysql.jdbc.Driver

env.jdbc.url=jdbc:mysql://localhost:3306/pinyougoudb_pro?characterEncoding=utf-8

env.jdbc.username=root

env.jdbc.password=123456

(3)filter文件夹下创建db_pro.properties

(4)修改properties下的db.properties

jdbc.driver=${env.jdbc.driver}

jdbc.url=${env.jdbc.url}

jdbc.username=${env.jdbc.username}

jdbc.password=${env.jdbc.password}

3.2定义Profile

修改pom.xml

  <properties>

   <env>dev</env>

  </properties>

  <profiles>

   <profile>

   <id>dev</id>

   <properties>

   <env>dev</env>

   </properties>

   </profile>    

   <profile>

   <id>pro</id>

   <properties>

   <env>pro</env>

   </properties>

   </profile>

  </profiles>

这里我们定义了2个profile,分别是开发环境和生产环境

3.3资源过滤与变量替换

修改pom.xml ,在build节点中添加如下配置

   <filters>

   <filter>src/main/resources/filters/db_${env}.properties</filter>

   </filters>

   <resources>

   <resource>

   <directory>src/main/resources</directory>

   <filtering>true</filtering>

   </resource>  

   </resources>

这里我们利用filter实现对资源文件(resouces) 过滤 
maven filter可利用指定的xxx.properties中对应的key=value对资源文件中的${key}进行替换,最终把你的资源文件中的username=${key}替换成username=value

3.4打包

在pinyougou-dao 工程 执行命令:package -P pro ,  解压生成的jar包,观察db.properties配置文件内容,已经替换为生产环境的值。

在pinyougou-sellergoods-service工程 执行命令 pageage  ,解压生成的war包里的pinyougou-dao的jar包,发现也是生成环境的值。

3.5测试运行

【1】连接生产数据库

(1)在pinyougou-dao 工程执行命令:install -P pro

(2)在pinyougou-sellergoods-service:执行命令:tomcat7:run

(3)在pinyougou-shop-web :  执行命令:tomcat7:run

【2】连接开发数据库

(1)在pinyougou-dao 工程执行命令:install -P dev  (或 install   )

(2)在pinyougou-sellergoods-service:执行命令:tomcat7:run

(3)在pinyougou-shop-web :  执行命令:tomcat7:run

4切换注册中心连接配置

4.1集中配置注册中心地址

(1)在pinyougou-common工程中properties下创建dubbox.properties

address=192.168.25.135:2181

(2)Spring目录下创建spring配置文件 applicationContext-dubbox.xml 配置如下:

<dubbo:registry protocol="zookeeper" address="${address}"/>

(3)所有的服务工程与web工程都要依赖pinyougou-common . 并删除每个工程中关于注册中心地址的配置

(4)安装pinyougou-common到本地仓库,然后测试运行。

4.2 MavenProfile配置

(1)在pinyougou-common工程中创建filters目录 ,目录下建立dubbox_dev.properties

env.address=192.168.25.135:2181

(2)建立dubbox_pro.properties

env.address=192.168.25.136:2181

(3)修改dubbox.properties

address=${env.address}

(4)修改pinyougou-common的pom.xml

<properties>

<env>dev</env>

</properties>

 <profiles>

<profile>

<id>dev</id>

<properties>

<env>dev</env>

</properties>

</profile>

<profile>

<id>pro</id>

<properties>

<env>pro</env>

</properties>

</profile>

</profiles> 

.............................

 <build>

<filters>

<filter>src/main/resources/filters/dubbox_${env}.properties</filter>

</filters>

<resources>

<resource>

<directory>src/main/resources</directory>

<filtering>true</filtering>

</resource>

</resources>

  </build>

mavenProfile文件配置和简单入门的更多相关文章

  1. Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门

    说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...

  2. Django Setting文件配置和简单的创建数据库字段

    Django Settings文件配置 静态文件配置 STATIC_URL = '/static/' # 静态文件配置 STATICFILES_DIRS = [ os.path.join(BASE_D ...

  3. Windows10下Django虚拟环境配置和简单入门实例

    环境win10家庭版64位 + python 3.5 + Django 1.8.2 1.创建virtualenv目录 开始/运行/cmd回车,进入cmd窗口,到自己指定的目录下创建virtualenv ...

  4. Maven环境搭建以及在IDEA中的配置与简单入门

    目录 一.下载与安装 二.配置 1. 环境变量 2. 阿里云镜像 3. 本地仓库 三.IDEA创建Maven项目 1. 创建一个原始的Maven项目 1.2 指定模板创建(可选) 2. 配置GAV 3 ...

  5. 2. 数据库文件配置与简单操作 Model / M()

    官方文档说明位置: Thinkphp/Conf/convention.php 内容说明如下: 'DB_TYPE' => '', // 数据库类型 'DB_HOST' => '', // 服 ...

  6. Spring简单的文件配置

    Spring简单的文件配置 “计应134(实验班) 凌豪” 一.Spring文件配置 spring至关重要的一环就是装配,即配置文件的编写,接下来我按刚才实际过程中一步步简单讲解. 首先,要在web. ...

  7. MyCAT简单入门配置

    MyCAT简单入门配置 安装jdk 建议1.7以上 安装mysql 安装MyCAT Mycat 源码:https://github.com/MyCATApache/Mycat-Server Mycat ...

  8. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  9. 菜鸟入门【ASP.NET Core】5:命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options

      命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来 ...

随机推荐

  1. CodeForces - 1098.DIV1.C: Construct a tree(贪心,构造)

    Misha walked through the snowy forest and he was so fascinated by the trees to decide to draw his ow ...

  2. Avito Cool Challenge 2018(div1+2)

    A. Definite Game: 题意:输入N,输出最小的结果N-x,其中x不少N的因子. 思路:N=2时,输出2:其他情况输出1:因为N>2时,N-1不会是N的因子. #include< ...

  3. Codeforces 698A:Vacations(DP)

    题目链接:http://codeforces.com/problemset/problem/698/A 题意 Vasya在n天中,有三件事情可以做,健身.比赛或者休息,但是不能连续两天都是比赛或都是但 ...

  4. Linux 'XXXXXX' "is not in the sudoers file. This incident will be reported" 解决方法

    添加方法如下: 1.进入root模式su -  注意:su和-之间有空格输入当前用户的密码 2.添加写权限chmod u+w /etc/sudoers 3.将自己加入到sudoers中 gedit / ...

  5. http-equiv 了解

    META标签是HTML语言HEAD区的一个辅助性标签,它位于HTML文档头部的<HEAD>标记和<TITLE>标记之间,它提供用户不可见的信息.meta标签通常用来为搜索引擎r ...

  6. opencv中的滤波

    以前的时候,为了过滤图像中的一些噪点,学过一些简单的滤波,比如中值滤波,均值滤波,也是自己实现的. 在opencv中有现成的函数可以调用,实现滤波的操作. 函数的原型如下: CVAPI(void) c ...

  7. 360 杀毒几K每秒的IO读取,SO MAD

    在没有用360杀毒扫描的状态下,从任务管理器中查看,居然有几K每秒的IO读取 . 好卡,直接卸载.

  8. ExtJS xtype 一览

    基本组件: xtype Class 描述 button Ext.Button 按钮 splitbutton Ext.SplitButton 带下拉菜单的按钮 cycle Ext.CycleButton ...

  9. php 生成.csv的文件

    $data = array( "title" => array("服务器", "链接", "对应ID"), &qu ...

  10. Hyperic Sigar API 举例

    Hyperic HQ 是什么? Hyperic HQ 是一个开源的(General Public License,GPL授权)IT资源管理框架,让用户使用统一的界面来管理各种不同的IT资源的管理,Hy ...