回顾过去

  生产环境,测试环境,开发环境在不同的环境下会有各种各样的配置,比如数据库链接地址,账户名,密码等等.不同环境下都需要配置,但是配置却又不同.以前分享过一篇文章,介绍了我之前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. linux自学(五)之开始centos学习,Xshell远程连接

    上一篇:linux自学(四)之开始centos学习,网络配置 前面操作都是在电脑中的虚拟机上操作的,比较麻烦,需要来回切换.下面我将使用远程连接工具Xshell进行操作,Xshell直接百度下载即可. ...

  2. Flask第三篇——安装Flask

    现在我们来安装Flask: Windows系统安装Flask 如果你的系统是Windows,那安装起来非常方便——pip install flask Mac系统安装Flask Mac安装Flask一般 ...

  3. Springboot的优点和实现

    一 优点 1.创建独立的Spring应用程序 2.嵌入式的Tomcat,不需要部署war包 3.简化Maven配置 4.自动配置Spring 5.提供生产就绪型功能,如指标,健康检查,和外部配置 6. ...

  4. Oracle 11gR2 RAC集群服务启动与关闭总结

    引言:这写篇文章的出处是因为我的一名学生最近在公司搭建RAC集群,但对其启动与关闭的顺序和原理不是特别清晰,我在教学工作中也发现了很多学员对RAC知识了解甚少,因此我在这里就把RAC里面涉及到的最常用 ...

  5. SPI: Service Provider Interface

    Service Provider Interface: JDK提供的一种服务发现的机制:主要是用于厂商实现JDK的只用. 比如说打印机,JDK提供了一个驱动接口com.printl.printerDr ...

  6. Spring Boot 入门之持久层篇(三)

    原文地址:Spring Boot 入门之持久层篇(三) 博客地址:http://www.extlight.com 一.前言 上一篇<Spring Boot 入门之 Web 篇(二)>介绍了 ...

  7. protobuf新增message报错:类型已存在

    问题现象:在一个已有的proto文件(RecommendResponse.proto)中新增一个message(BookList),用maven编译proto文件时报错: E:\workspace\m ...

  8. 关于千兆以太网芯片及VLAN浅析

    MARVEL出产的高端千兆以太网交换芯片,对每个端口支持不同的交换模式. 包括4种模式: Secure模式:所带VLAN tag必须存在于VTU表中,且入端口必须是该VLAN成员,否则丢弃报文. Ch ...

  9. FPGA的CNN加速,你怎么看?

    网上对于FPGACNN加速的研究已经很多了,神经网络的硬件加速似乎已经满大街都是了,这里我们暂且不讨论谁做的好谁做的不好,我们只是根据许许多多的经验来总结一下实现硬件加速,需要哪些知识,考虑哪些因素. ...

  10. js点击按钮触发事件的方法

    <!DOCTYPE html> <html> <body> <h1>My First Web Page</h1> <input id= ...