回顾过去

  生产环境,测试环境,开发环境在不同的环境下会有各种各样的配置,比如数据库链接地址,账户名,密码等等.不同环境下都需要配置,但是配置却又不同.以前分享过一篇文章,介绍了我之前A公司的差异化配置实现( http://www.cnblogs.com/abcwt112/p/5203348.html  原理就是增加一个classpath目录,把差异化配置都放在这个目录下,然后差异化文件不打包.这样差异化配置就会直接读取自指定的classpath下的文件)..这次我想来分享一下怎么使用maven来实现打差异化的包.

实现

1.

首先..按照最最最常用的配置方法,我们数据库的配置肯定是会写在一个properties文件放在resporces下的.

比如host = 192.168.X.X

这个时候我们的具体值不要写死,而是使用占位符的形式,就像Spring的placeholder一样,这个占位符我们会在maven打包的时候被替换成具体的值.

所以host = ${host}

2.

这个host需要被替换,所以肯定要有文件写明具体要被替换成什么值,我们可以新建2个文件,1个叫test.properties.里面host = test.XXXXX打测试包的时候就用这个值替换配置文件里的host.

另外1个叫prod.properties,里面host = prod.XXXX.打生产包的时候就用这个值替换配置文件里的host.

3.在maven的pom.xml里配置一下

 <profiles>
<profile>
<id>test</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<finalName>test</finalName>
<filters>
<filter>profiles/test.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>param.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</profile>
<profile>
<id>prod</id>
<build>
<finalName>prod</finalName>
<filters>
<filter>profiles/prod.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>param.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</profile>
</profiles>

这里配置了2个profile.在打包的时候可以选择. 要注意的配置是filter节点,里面指定的是用哪个文件里的值去替换其他文件.

resource节点下的directory指定了哪个目录下的文件需要处理.这里我指定了src/main/resources目录.

第一段

40                         <includes>
41 <include>**/*.*</include>
42 </includes>
43 <filtering>false</filtering>

指定了这个resources下的所有文件都是需要被打包进去的.文件里的值不需要被替换

第二段

47                         <includes>
48 <include>param.properties</include>
49 </includes>
50 <filtering>true</filtering>

指定了param.properties文件是需要被打包的同时这个文件里的值是需要被替换的.

打包的时候使用 -P prod 来指定使用prod这个profile,同理-P test来指定使用test这个profile. 比如 clean package -P prod

filtering为true的resources节点的include一定不要配置错..不然下面的所有文件里的占位符都会被替换..比如你的jsp里的${}也会被替换...所以要替换的文件最好精确写到文件名而不是*.*这样

另外第一个include为**/*.*的resources是要写的.不然除了第二个resources里指定的要被替换的param.properties文件,其他文件都会被过滤不打进包里去.

(2个配置文件里profile节点下的build节点里的配置完全一样,貌似可以提取出来配置在pom的project节点下的build节点,所以配置可能有很多种,这是一种方式)

最终打包的成果:

这样就能够根据打包时候选择不同的profile达到差异化配置的方式.达到不同环境统一打包的效果.

利用maven实现差异化配置的更多相关文章

  1. 基于tomcat与Spring的实现差异化配置方案

    起因 在实际开发过程中经常需要加载各种各样的配置文件..比如数据库的用户名密码,要加载的组件,bean等等..但是这种配置在各个环境中经常是不一样的....比如开发环境和测试环境,真实的生产环境.. ...

  2. Clusternet v0.5.0 重磅发布: 全面解决多集群应用分发的差异化配置难题

    作者 徐迪,腾讯云容器技术专家. 汝英哲,腾讯云高级产品经理. 摘要 在做多集群应用分发的时候,经常会遇到以下的差异化问题,比如: 在分发的资源上全部打上统一的标签,比如 apps.my.compan ...

  3. Android Gradle基于参数化配置实现差异化构建

    一.背景: 项目中有一些特殊的需求,如个别渠道集成腾讯bugly,个别渠道集成易观统计,不同的渠道集成不同的推送策略(如Oppo渠道优先Opush推送),不同的渠道拥有不同的第三方登录集成等等.这些需 ...

  4. IDEA02 利用Maven创建Web项目、为Web应用添加Spring框架支持、bean的创建于获取、利用注解配置Bean、自动装配Bean、MVC配置

    1 环境版本说明 Jdk : 1.8 Maven : 3.5 IDEA : 专业版 2017.2 2 环境准备 2.1 Maven安装及其配置 2.2 Tomcat安装及其配置 3 详细步骤 3.1 ...

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

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

  6. 推动FPGA发展箭在弦上,国内厂商须走差异化之路

    7月25日,由中国电子报与深圳投资推广署共同举办的“第六届(2018)中国FPGA产业发展论坛”在深圳召开. 作为四大通用集成电路芯片之一,FPGA(现场可编程门阵列)的重要性与CPU.存储器.DSP ...

  7. 利用Maven把项目生成jar包供其他项目使用

    每当搭建框架时,第一步就是为系统整理一个接一个的jar包.用多了就开始深思,如何把自己的项目也整成jar包,供他人使用呢? 近期一直在看徐晓斌所著:<Maven实战>.因自己学识不够,只是 ...

  8. 利用Maven管理工程项目本地启动报错及解决方案

    目前利用Maven工具来构建自己的项目已比较常见.今天主要不是介绍Maven工具,而是当你本地启动这样的服务时,如果遇到报错,该如何解决?下面只是参考的解决方案,具体的解法还是得看log的信息. 1. ...

  9. Maven的安装、配置及使用入门

    Maven的安装.配置及使用入门 本书代码下载 大家可以从我的网站下载本书的代码:http://www.juvenxu.com/mvn-in-action/,也可以通过我的网站与我取得联系,欢迎大家与 ...

随机推荐

  1. HDU4035 Maze(师傅逃亡系列•二)(循环型 经典的数学期望)

    When wake up, lxhgww find himself in a huge maze. The maze consisted by N rooms and tunnels connecti ...

  2. JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用

    下面把项目中的用户类中有个:一对一  一对多  多对多的注解对应关系列取出来用于学习      说明:项目运行正常 问题类:一对多.一对一.多对多 ============一对多 一方的设置 @One ...

  3. WPF 应用完全模拟 UWP 的标题栏按钮

    WPF 自定义窗口样式有多种方式,不过基本核心实现都是在修改 Win32 窗口样式.然而,Windows 上的应用就应该有 Windows 应用的样子嘛,在保证自定义的同时也能与其他窗口样式保持一致当 ...

  4. 如何创建一个基于命令行工具的跨平台的 NuGet 工具包

    命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务.NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NE ...

  5. 将美化进行到底,把 PowerShell 做成 oh-my-zsh 的样子

    不知你有没有看过 Linux 上 oh-my-zsh 的样子?看过之后你一定会惊叹,原来命令行还能这么玩!然而 Windows 下能这么玩吗?答案是可行的,接下来就来看看怎么玩. Windows 下我 ...

  6. python笔记-20 django进阶 (model与form、modelform对比,三种ajax方式的对比,随机验证码,kindeditor)

    一.model深入 1.model的功能 1.1 创建数据库表 1.2 操作数据库表 1.3 数据库的增删改查操作 2.创建数据库表的单表操作 2.1 定义表对象 class xxx(models.M ...

  7. 《selenium2 python 自动化测试实战》(8)——定位iframe

    我们来看一段最早的代码: # coding: utf-8 from selenium import webdriverfrom time import sleep driver = webdriver ...

  8. C#飞行棋游戏

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. ft,dtft,dft的关系(转载)

    很多同学学习了数字信号处理之后,被里面的几个名词搞的晕头转向,比如DFT,DTFT,DFS,FFT,FT,FS等,FT和FS属于信号与系统课程的内容,是对连续时间信号的处理,这里就不过多讨论,只解释一 ...

  10. osquery简单试用

    备注: osquery  facebook 开源的将操作系统指标转换为sql 查询,方便好用,很适合devops 性能分析,系统监控 1. 安装 参考 https://osquery.io/downl ...