利用maven实现差异化配置
回顾过去
生产环境,测试环境,开发环境在不同的环境下会有各种各样的配置,比如数据库链接地址,账户名,密码等等.不同环境下都需要配置,但是配置却又不同.以前分享过一篇文章,介绍了我之前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实现差异化配置的更多相关文章
- 基于tomcat与Spring的实现差异化配置方案
起因 在实际开发过程中经常需要加载各种各样的配置文件..比如数据库的用户名密码,要加载的组件,bean等等..但是这种配置在各个环境中经常是不一样的....比如开发环境和测试环境,真实的生产环境.. ...
- Clusternet v0.5.0 重磅发布: 全面解决多集群应用分发的差异化配置难题
作者 徐迪,腾讯云容器技术专家. 汝英哲,腾讯云高级产品经理. 摘要 在做多集群应用分发的时候,经常会遇到以下的差异化问题,比如: 在分发的资源上全部打上统一的标签,比如 apps.my.compan ...
- Android Gradle基于参数化配置实现差异化构建
一.背景: 项目中有一些特殊的需求,如个别渠道集成腾讯bugly,个别渠道集成易观统计,不同的渠道集成不同的推送策略(如Oppo渠道优先Opush推送),不同的渠道拥有不同的第三方登录集成等等.这些需 ...
- 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 ...
- maven 利用 profile 进行多环境配置
我们在进行项目的多环境配置时,有很多种方式供我们选择,比如 SpringBoot 自带的 application-dev.yml.maven 的 profile 等.这里介绍的就是如何利用 profi ...
- 推动FPGA发展箭在弦上,国内厂商须走差异化之路
7月25日,由中国电子报与深圳投资推广署共同举办的“第六届(2018)中国FPGA产业发展论坛”在深圳召开. 作为四大通用集成电路芯片之一,FPGA(现场可编程门阵列)的重要性与CPU.存储器.DSP ...
- 利用Maven把项目生成jar包供其他项目使用
每当搭建框架时,第一步就是为系统整理一个接一个的jar包.用多了就开始深思,如何把自己的项目也整成jar包,供他人使用呢? 近期一直在看徐晓斌所著:<Maven实战>.因自己学识不够,只是 ...
- 利用Maven管理工程项目本地启动报错及解决方案
目前利用Maven工具来构建自己的项目已比较常见.今天主要不是介绍Maven工具,而是当你本地启动这样的服务时,如果遇到报错,该如何解决?下面只是参考的解决方案,具体的解法还是得看log的信息. 1. ...
- Maven的安装、配置及使用入门
Maven的安装.配置及使用入门 本书代码下载 大家可以从我的网站下载本书的代码:http://www.juvenxu.com/mvn-in-action/,也可以通过我的网站与我取得联系,欢迎大家与 ...
随机推荐
- jquery动态增加或删除tr和td【实际项目】
难点: (1)动态增加.删除tr和td (2)每天tr和td都有下标,且下标要动态变化, (3)tr和td为什么下标不能随便写,原因是此处需要把所有tr中的数据以list的形式发送到后台对象中,所有每 ...
- Java并发--lock锁详解
在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问.本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方 ...
- Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码
Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性.以至于我们只需要编写很少量的代码便能够编译并执行我们的代码. 作为 Roslyn 入门篇文章之一,你将可以通过本文学习如何开始编写一 ...
- Django的url别名功能的使用
- URL: from django.urls import reverse url(r'^all/(?<article_type_id>\d+).html$', home.index, ...
- Python 函数 -globals()
globals() globals() 函数会以字典类型返回当前位置的全部全局变量. 实例: >>>a='runoob' >>> print(globals()) ...
- ubuntu下eclipse安装maven插件
ubuntu科输入如下指令安装eclipse:sudo apt-get install eclipse ubuntu下安装maven插件打开Eclipse点击Help -> Install Ne ...
- mongodb 的一些启动命令
启动命令 nohup /home/sh/local/mongodb-linux-x86_64-rhel62-3.4.0/bin/mongod -dbpath /home/sh/local/mongod ...
- WPF ComboBox下拉绑定Treeview 功能的实现
因为项目需要,接触到这个功能点,借助网络还有自己的一点摸索,实现了这个功能.相关代码如下: XAML部分的代码: <ComboBox Grid.Row=" RenderTransfor ...
- 【Leetcode 167】Two Sum II - Input array is sorted
问题描述:给出一个升序排列好的整数数组,找出2个数,它们的和等于目标数.返回这两个数的下标(从1开始),其中第1个下标比第2个下标小. Input: numbers={2, 7, 11, 15}, t ...
- Nginx RTMP 模块 nginx-rtmp-module 指令详解
译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解.指令Corertmp语法:rtmp { ... }上下文:根描述:保存所 ...