代码里的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. 11i and R12 Table Count in Different Module

    Advertisement Module 11i Tables R12 Tables New Tables AR 551 616 118 BOM 264 337 73 GL 186 309 140 A ...

  2. C#实现缩放字体

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  3. 采用redis 主从架构的原因

    如果系统的QPS超过10W+,甚至是百万以上的访问,则光是Redis是不够的,但是Redis是整个大型缓存架构中,支撑高并发的架构非常重要的环节. 首先,你的缓存中间件.缓存系统,必须能够支撑起10w ...

  4. modbus.c

    #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> //#include ...

  5. Promise is rejected: Error: 2 UNKNOWN: error starting container: API error (404): {"message":"network build-blockchain-insurance-app_default not found"}出错的解决方案

    错误描述: docker logs web 现象: > blockchain-for-insurance@2.1.0 serve /app > cross-env NODE_ENV=pro ...

  6. PL2303 Windows8.1驱动

    常用的USB转串口下载芯片驱动可以参照我这篇文章USB转串口 FT232/PL2303/CH340 驱动以及使用体会 ,今天有找出了那根串口线打算使用,由于系统已经换为Windows8.1 X64所以 ...

  7. 细说SQL Server中的加密【转】

    简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程.在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在 ...

  8. Spring配置中的"classpath:"与"classpath*:"的区别研究

    概念解释及使用场景: classpath是指WEB-INF文件夹下的classes目录. 通常我们一般使用这种写法实在web.xml中,比如spring加载bean的上下文时,如下: <!--系 ...

  9. 有序数组每个数平方后,不同数字的个数?O(n)

    此乃一道笔试题,当时的确也做出来啦.(但是在细节上还是出错啦,对多次重复出现的数字可能会重复计数,没有记录上次删除的元素) 如题,有序数组,可以知道平方之后在两边的数据较大,中间的数据较小. 因此可以 ...

  10. ubuntu 下python环境的切换使用

    如何在Anaconda的python和系统自带的python之间切换 一般ubuntu下有三种python环境,1. 系统自带python2,3;在/usr/bin路径下:2. anaconda下安装 ...