代码里的resource信息有很多,代码里写死某一个环境的配置的话,有以下若干问题。

1. dev,不同的beta上,使用的resource信息不同。

2. 代码没有发布到对应的环境上,需要去机器上需要手动修改。不锁住配置文件,则每次发布都需要手动修改;若锁住配置文件,则代码更新了配置文件,则机器上还是老的配置文件。把测试的环境写到代码里,容易引起配置不稳定,上线前忘了改过来可能造成问题。

3. 测试中有时日志中没有打出来是使用的是哪个环境配置,发现环境不对时,查起来费时又费劲。

4. 环境交付其他团队使用时,出问题还需要支出人力配合定位问题。

为了解决以上问题,我们可以做以下的事情。

一、profile

当resource配置信息内容根据环境种类的不同而不同时,如dev和beta使用不同的sql数据库连接配置等,使用profile来针对每个环境配置一套resource。pmo中加入:

<profiles>
<!-- 打包开发环境 -->
<profile>
<id>dev</id>
<activation>
<property>
<name>hello.dev</name>
<value>dev</value>
</property>
</activation>
<build>
<resources>
<resource>
<directory>${profiles.dir}/dev</directory>
</resource>
</resources>
</build>
</profile>
<!-- 打包beta环境 -->
<profile>
<id>hello.beta</id>
<activation>
<property>
<name>hello.beta</name>
<value>beta</value>
</property>
</activation>
<build>
<resources>
<resource>
<directory>${profiles.dir}/beta</directory>
</resource>
</resources>
</build>
</profile>
</profiles>

  指定dev和beta分别使用的resource目录。我们在profiles.dir里准备好对应的resource配置即可。发布时,使用maven命令激活相应的环境即可:mvn -P beta 即使用了beta的profile。

二、filter

有时,同一种环境,只是域名不同,可以使用filter来进行变量替换。如,环境A1上,域名应是xxxA1.beta.com; 环境A2上,域名应是xxxA2.beta.com。pmo上配置:

<profile>
<id>beta</id>
<activation>
<property>
<name>hello.beta</name>
<value>beta</value>
</property>
</activation>
<build>
<filters>
<filter>src/main/filters/beta.properties</filter>
</filters>
<resources>
<resource>
<directory>${profiles.dir}/beta</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
<include>**/*.config</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</profile>

  配置里说,${profiles.dir}/beta里符合条件的文件,需要被filter里配置的文件里的参数进行替换。filter配置src/main/filters/beta.properties里的文件怎么写呢?

all.use.A.domain=xxxA1.beta.com
all.use.B.domain=xxxB1.beta.com

  看到filter文件里,配置了A服务对应的域名是xxxA1.beta.com。就是说,resource文件里,遇到${all.use.A.domain}这个变量时,即替换为xxxA1.beta.com。

以上是默认的配置,在编译的时候,使用命令:mvn -Pbeta clean package -Dall.use.A.domain=xxxA2.beta.com,则在编译的时候,会将xxxA2.beta.com这个内容替换到resource里${all.use.A.domain}的变量处。

注意与profile下配置文件里的变量的区别。在filter文件里的变量,在编译时,会替换掉原文件中的值。而在profile配置文件中定义的变量,不会替换代码里的变量占用号,发布机器上,仍是变量符号。

比如,resources文件spring-dubbo-consumer.xml里,配置文件内容为:

<dubbo:registry id="ordercenter_core" protocol="zookeeper" address="${dubbo.zk}" group="${core_dubbo_group}"></dubbo:registry>

  

其中,${dubbo.zk}这个变量内容定义在profiles下的文件中,内容为dubbo.zk=l-zk.beta.com:8888。代码发布到测试上后,查看spring-dubbo-consumer.xml,内容不变。变量替换是在服务执行时完成的。

利用mvn进行多环境配置的更多相关文章

  1. maven 利用 profile 进行多环境配置

    我们在进行项目的多环境配置时,有很多种方式供我们选择,比如 SpringBoot 自带的 application-dev.yml.maven 的 profile 等.这里介绍的就是如何利用 profi ...

  2. 利用Vagrant完成开发环境配置

    作者:astaxie链接:https://github.com/astaxie/go-best-practice/blob/master/ebook/zh/01.0.md著作权归作者所有.商业转载请联 ...

  3. SpringBoot | 第五章:多环境配置

    前言 写上一篇看英文资料,耗费了心力呀,这章,相对来说简单点.也比较熟悉,但是这很实用.不扯了,开始~ 多环境配置 maven的多环境配置 springboot多环境配置 总结 老生常谈 多环境配置 ...

  4. 详细的图文介绍如何利用XAMPP本地建站的环境配置教程

    原文:详细的图文介绍如何利用XAMPP本地建站的环境配置教程 WordPress 是一个简便快捷,用途广,人气旺的一个开源的博客建站程序.很有很多等您去发现. 简便快捷:在性能上易于操作.易于浏览: ...

  5. VUE 利用 webpack 给生产环境和发布环境配置不同的接口地址

    转载地址: https://blog.csdn.net/gebitan505/article/details/58166055 VUE 利用 webpack 给生产环境和发布环境配置不同的接口地址 前 ...

  6. 如何利用Vagrant快速搭建相同配置的开发环境?

    作为一名程序猿,我们常常会遇到需要搭建开发环境的问题,特别是在新入职的时候,sublime, node, apache, mysql, php等等以及各种框架的安装.如果入职的是大公司有可能这些必要的 ...

  7. 【机器学习】利用 Python 进行数据分析的环境配置 Windows(Jupyter,Matplotlib,Pandas)

    环境配置 安装 python 博主使用的版本是 3.10.6 在 Windows 系统上使用 Virtualenv 搭建虚拟环境 安装 Virtualenv 打开 cmd 输入并执行 pip inst ...

  8. SpringBoot01 InteliJ IDEA安装、Maven配置、创建SpringBoot项目、属性配置、多环境配置

    1 InteliJ IDEA 安装 下载地址:点击前往 注意:需要下载专业版本的,注册码在网上随便搜一个就行啦 2 MAVEN工具的安装 2.1 获取安装包 下载地址:点击前往 2.2 安装过程 到官 ...

  9. Eclipse上Maven环境配置使用 (全)

    Eclipse上Maven环境配置使用 (全) 1. 安装配置Maven: 1.1 从Apache网站 http://maven.apache.org/ 下载并且解压缩安装Apache Maven. ...

随机推荐

  1. 使用集成SOA网关的PL / SQL中的REST

    使用集成SOA网关的PL / SQL中的REST Oracle电子商务套件集成SOA网关(ISG)是一款开箱即用的模块,支持在Oracle Integration Repository中发布支持的接口 ...

  2. Linux学习18-gitlab新建项目提交代码

    前言 gitlab前面已经搭建好了,如果我们想用把代码上传到gitlab仓库上的话,先要新建一个项目仓库.然后本地安装git环境,就可以提交了 root用户 gitlab首次在浏览器上打开web页面, ...

  3. Mac上 python 找不到 yaml模块

    (1)  yaml http://codyaray.com/2011/12/pyyaml-using-easy_install-on-mac-os-x-lion 1.报错 ImportError: N ...

  4. java.util.Vector排序

    Vector的排序: import java.util.*; class MyCompare implements Comparator //实现Comparator,定义自己的比较方法{public ...

  5. Cocos2d-x V2.x版本对64bit的支持

    2015年2月1日后新提交的应用必须要支持64位架构. 我所使用的是cocos2d-x V2.0版本,而且源码有部分代码是修改过的.好在cocos2d-x官方已经放出了一个支持64位的2.2.6版本, ...

  6. 《Python开发实战》

    <Python开发实战> 基本信息 作者: (日)BePROUD股份有限公司 译者: 盛荣 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115320896 上架时 ...

  7. [Android Pro] 开发一流Android SDK

    cp from : https://blog.csdn.net/dd864140130/article/details/53558011 本篇文章已授权微信公众号 guolin_blog (郭霖)独家 ...

  8. Makefile:160: recipe for target 'all' failed (Ubuntu 16.06 + Opencv3.2)解决办法

    前言 之前一直用的opencv 好好的,今天安装了anaconda之后,python中的opencv不能用了,即便是拷贝cv2.so之后也是不能用,问题如下: 根本原因 安装anaconda之后,很多 ...

  9. Asp.Net MVC3 简单教程(三)详解Controller之Filter 【转】

    前言 前面两篇写的比较简单,刚开始写这个系列的时候我面向的对象是刚开始接触Asp.Net MVC的朋友,所以写的尽量简单.所以写的没多少技术含量.把这些技术总结出来,然后一简单的方式让更多的人很好的接 ...

  10. Python/Shell 正则表达式与运用

    正则表达式用的地方是很多的.比如字符串处理过程中.最近遇到记录一下. 1. 比如在shell中 #!/bin/bash str="date:2017-11-28 os:centos blac ...