前言:
  写一篇水文来打发下时间吧^_^. 在应用开发中, 总会遇到开发/测试/预发布/线上环境, 其环境不同, 其具体的配置项也有所不同, 因此如何快速的切换各个环境配置, 进行打包配置, 成了一个小痛点.
  本文主要讲述基于maven构建的java工程(基于spring), 如何实现多环境配置, step by step.

多环境配置:
  把多环境的配置文件集中起来, 比如按如下方式整合于工程代码.
  
  需要被打包替换的配置文件app.properties文件存于src/main/resource/conf下, 其内容为:

key.name=${key.name}
key.value=${key.value}

profile标签:
  在maven中profile标签就是为多环境配置而生, 它支持定义了各个环境下的变量集, 选取激活某个profile后, 会自动屏蔽掉其他profile的变量.
  比如定义如下:

    <profiles>
<profile>
<id>test</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<env>test</env>
</properties>
</profile>
<profile>
<id>online</id>
<properties>
<env>online</env>
</properties>
</profile>
</profiles>

  这边定义了test, online两个profile.
  
  此时默认打包, 其会选用test这个profile, 原因是因为它是默认激活的, 也就是说变量env(key=env, value=test)将作用于pom.xml文件的其他配置项.

filter&resource标签:
  filter和resource标签是一块使用的, 前者指定了载入的properties文件, 后者则指定了key/value对替换的目标作用目录.

<build>
<finalName>test-app-project</finalName> <!-- 使用指定的filter进行过滤,在执行mvn命令的时候带上-Ptest就代表测试环境(默认),
就会加载测试环境的properties,-Ponline就代表线上环境 -->
<filters>
<filter>settings/${env}/app.properties</filter>
</filters> <!-- 资源文件位置src/main/resources/,
这下面的资源文件的${}会全部被替换成filter中的标签内容 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<!-- exclude可以排除指定文件,支持通配符, 匹配项不会生成到classes目录下 -->
<!--<excludes>-->
<!--<exclude>env/dev.properties</exclude>-->
<!--</excludes>-->
</resource>
</resources>
</build>

  其实从xml的配置中, 我们可以解读如下, filter目录为: settings/${env}/app.properties. 由于激活的profile为test, 则env为test. 这样filter目录为settings/test/app.properties. maven自动提取这个key/value文件, 把src/main/resource目录下的配置文件中${}全部替换.

测试:
  通过maven进行编译打包, 其可以指定命令行参数P, 指定激活那个profile.
  比如要激活online(线上配置), 则执行如下命令:

mvn -Ponline package

  执行之后具体的产出结果如下:
  

总结:
  maven的多环境配置, 算是一个基础的点. 这边纯粹写个水文吧, 记录一下^_^.

maven工程的多环境配置方案(profile)的更多相关文章

  1. spring boot 环境配置(profile)切换

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  2. Maven 从安装到环境配置到项目搭建

    maven是基于项目对象模型(pom),可以通过一小段的描述信息来管理项目的构建,报告和文档的软件项目管理工具. Maven是构建项目的管理工具,白话就是说:“Maven的核心功能便是合理叙述项目间的 ...

  3. 关于idea maven工程创建struts2入门配置及案例

    1.在maven工程下添加需要导入的jar包节点 <dependencies> <dependency> <groupId>org.apache.struts< ...

  4. maven下载安装以及环境配置

    1.到官网下载maven 2.解压到自己想放的安装目录 3.复制maven所在的安装路径,然后右键我的电脑-->属性-->高级系统设置-->环境变量 4.在系统变量中新建,设置变量名 ...

  5. 学会springboot多环境配置方案不用5分钟

    一 前言 本篇文章的主题是在springboot中写多个配置文件,指定让个配置文件生效,以便于达到在开发环境,测试环境,线上环境根据不同的配置灵活应用:读完本篇你将获得,学会springboot的多环 ...

  6. jenkins配置maven工程指定不同环境的配置文件打包

    打包命令 这里我们指定配置文件问test 这个是在pom.xml里面定义的, 里面有test,production和devlop三个定义 在不同环境使用Jenkins的时候,-P后面加上不同的参数 我 ...

  7. (二)Maven的安装与环境配置

    想要安装 Apache Maven在Windows 系统上, 需要下载 Maven 的 zip 文件,并将其解压到你想安装的目录,并配置 Windows 环境变量. 所需工具 : 1.JDK 2.Ma ...

  8. (二)Maven的安装与环境配置

    主要内容 在Windows上安装Maven 安装目录分析 在Windows上安装Maven 本机环境:Windows10,JDK9.0.4. 想要安装Maven,需要下载Maven的zip文件,并将其 ...

  9. maven的安装和环境配置

    一.下载maven Apache Maven下载地址:http://maven.apache.org/download.cgi 二.maven的安装 将下载好的安装文件解压到d盘根目录下即可(当然,这 ...

随机推荐

  1. 按钮切换显示不同的内容(js控制)

    今天项目发现了一个jsp页面按钮切换,下面展示模块的不同显示问题,看到同事修改完之后的效果,js控制感觉特写好,所以想写把这个好的方法js记录下来,以便以后的参考. 一:先上图,了解大概的样子,如下图 ...

  2. 使用AJAX报406错误

    使用AJAX报406错误,基本有一下两种情况: (1)90%的可能是没有添加jackson包: (2)10%的可能是请求的url后缀是*.html 在springmvc里面,如果请求的是*.html, ...

  3. Bellman-Ford算法——为什么要循环n-1次?图有n个点,又不能有回路,所以最短路径最多n-1边。又因为每次循环,至少relax一边所以最多n-1次就行了!

    单源最短路径 给定一个图,和一个源顶点src,找到从src到其它所有所有顶点的最短路径,图中可能含有负权值的边. Dijksra的算法是一个贪婪算法,时间复杂度是O(VLogV)(使用最小堆).但是迪 ...

  4. nginx反向代理配置相对路径

    需求: 在公司内部搭建了一个php的网站,想用花生壳映射到外网. 一.反向代理解决直接映射不成功问题 直接用把花生壳的"域名+端口"指向此php网站并竟然不生效.但是不加网站名可以 ...

  5. 自建yum源解决Ceph搭建过程中从官网取包慢的问题

    最近项目组需要ceph环境,第一次搭建ceph,各种不顺,装了卸,卸了装,一遍又一遍地按照官网的操作进行.最气人的是网速差,从官网取包太慢.一轮尝试就浪费一上午. 因此想到本地新建yum源. 首先,按 ...

  6. Eclipse Mars-Ant无法使用jre1.6的问题

    https://www.jianshu.com/p/24b9517d7f43 Eclipse 升级到Mars 4.5.1版本后,老项目使用jdk1.6,通过ant编译jar时,会遇到如下问题: 使用j ...

  7. Android面试优雅地介绍自己的项目

    本文转载:m.blog.csdn.net/iamsamzhang/article/details/51916584 先说句题外话,很多公司16年秋招的内推已经开始啦,我目前知道的在北京有网易.百度和微 ...

  8. 五笔xu

      1● 横 a s d f g     半包围 上下 左右   2● 竖 h j k l m 左右 上下 半包围     3● 撇 q w e r t     半包围 上下 左右 4● 捺 y u ...

  9. Java Web(九) JDBC及数据库连接池及DBCP,c3p0,dbutils的使用

    DBCP.C3P0.DBUtils的jar包和配置文件(百度云盘):点我下载 JDBC JDBC(Java 数据库连接,Java Database Connectify)是标准的Java访问数据库的A ...

  10. nyoj-0613-免费馅饼(dp)

    nyoj-0613-免费馅饼 G. 免费馅饼 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在 ...