项目过程中,在不同的阶段,分别需要部署开发环境,测试环境,线上环境。如果都用一套配置文件,很容易弄乱,所以维持多套配置文件很有必要。

maven提供了一组属性以供开发人员灵活搭配,可以根据环境来打包,比如测试环境:mvn package -DskipTests -P test,-P也就是指定profile里面id为test的子项配置来打包。在pom文件里面,可以指定多套配置文件,下面例子中区分了三套配置文件,不指定-P则默认为dev。其中的env相当于属性文件中的env=test,也可以多指定多个属性,看实际需要。至于为什么不在相应的属性文件中添加类似env这样的配置,下文会提到。

   <!-- 区分环境打包 -->
<profiles>
<!-- 开发环境[默认] -->
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 测试环境 -->
<profile>
<id>test</id>
<properties>
<env>test</env>
</properties>
</profile>
<!-- 线上环境 -->
<profile>
<id>product</id>
<properties>
<env>product</env>
</properties>
</profile>
</profiles>

resources和filters,maven中的这两个属性通常是搭配起来使用的,filter这里可以理解为筛选器或者填充器。filters里面可以配置多个filter,但是会以最后一个为准,所以一般只配置一个filter,看下面例子。例子有${env},打包的时候,根据-P test指定,-P 后面的参数与<profile>的<id>一一对应,再根据此ID,到<profile> 的 <properties>得到env属性值,即<env>test</env>。上文指定了三套配置,所以项目里面也需要有这三个配置文件:dev.properties , test.properties , product.properties

    <filters>
<filter>src/main/resources/${env}.properties</filter>
</filters>

然后是resources

  1. directory属性指定资源文件放置的目录。
  2. includes则是指定打包时,需要打到jar/war包里的配置文件。下面例子是说需要把src/main/resources目录下的所有的xml配置文件和init.properties属性文件打到包里,所以dev.properties,test.properties,product.properties这三个属性文件不会出现在[jar/war]包文件里
  3. filtering如果设置为false的话,则表示上文的filters配置失效;如果设置为true,则会根据${env}.properties里面的键值对来填充includes指定文件里的${xxxx}占位符。
    <!-- 指定资源文件目录 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<!-- 设置为true,则init.properties会根据${env}.properties里面的配置来填充 -->
<filtering>true</filtering>
<includes>
<include>*.xml</include>
<include>init.properties</include>
</includes>
</resource>
</resources>

最后演示一下打包运行的结果,假设init.properties里有这么几行:

###########################mysql#################################################
pool.driverClassName=${pool.driverClassName}
pool.url=${pool.url}
pool.username=${pool.username}
pool.password=${pool.password}
pool.maxWait=${pool.maxWait}
# env的属性在这里也有效
env=${env}

test.properties属性文件里是如下配置,注意没有pool.maxWait配置

###########################mysql#################################################
pool.driverClassName=com.mysql.jdbc.Driver
pool.url=jdbc:mysql://192.168.100.23:3306/etmis
pool.username=root
pool.password=123456

则运行打包命令[mvn package -DskipTests -P test]之后,init.properties会被填充为:

###########################mysql#################################################
pool.driverClassName=com.mysql.jdbc.Driver
pool.url=jdbc:mysql://192.168.100.23:3306/etmis
pool.username=root
pool.password=123456
pool.maxWait=${pool.maxWait}
# env的属性在这里也有效
env=test
pool.maxWait不会被填充,因为在test.properties属性文件里面没有这个键值对。在xml文件里面的筛选填充也是一样,会根据文件中的${xxxx}占位符来筛选处理。
<profile>里面配置的属性和${env}.properties里面的属性如果有冲突,比如test.properties里面也配置了【env=testaaaa】,会优先使用<profile>里面的

maven 根据profile,resources,filters来区分部署环境的更多相关文章

  1. maven根据profile,resources,filters来区分部署环境

    项目过程中,在不同的阶段,分别需要部署开发环境,测试环境,线上环境.如果都用一套配置文件,很容易弄乱,所以维持多套配置文件很有必要. maven提供了一组属性以供开发人员灵活搭配,可以根据环境来打包, ...

  2. [转]Maven中profile和filtering实现多个环境下的属性过滤

    背景 项目构建的时候,需要根据不同的场景来改变项目中的属性资源,最为常见的莫过于数据库连接配置了,试想有生产环境.测试缓存.发布环境等,需要为不同的场景下来动态的改变数据库的连接配置.而使用maven ...

  3. 基于maven的profile实现动态选择配置文件

    需求 根据选择不同的部署环境自动替换相关配置变量,如连接的数据库等. 最终效果概览 部署环境分为dev和release 工程目录结构 myproject |-profile | |-dev | | | ...

  4. Maven之profile实现多环境配置动态切换

            一般的软件项目,在开发.测试及生产等环境下配置文件中参数是不同的.传统的做法是在项目部署的时候,手动修改或者替换这个配置文件.这样太麻烦了,我们可以用Maven的profile来解决这 ...

  5. 【maven】Maven根据Profile读取不同配置环境配置文件

    开发需求:在日常开发中,我们大多都会有开发环境(dev).测试环境(test).生产环境(product),不同环境的参数肯定不一样,我们需要在打包的时候,不同环境打不同当包,如果手动改,一方面效率低 ...

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

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

  7. maven中profile的使用

    转载:https://blog.csdn.net/java_collect/article/details/83870215 前言       在开发过程中,我们的项目会存在不同的运行环境,比如开发环 ...

  8. Spring boot项目maven的profile多环境配置不自动替换变量的问题解决

    Spring boot项目maven的profile多环境配置不自动替换变量的问题解决   在网上找了好久,配置都很简单,可是我的程序就是不能自动替换变量,最终单独测试,发现原来是引用spring b ...

  9. 使用maven的profile切换项目各环境的参数

    Java后端开发经常需要面对管理多套环境,一般有三种环境:开发,测试,生产. 各个环境之间的参数各不相同,比如MySQL.Redis等不同环境的host不一样,若每个环境都手动替换环境很容易出错,Ma ...

随机推荐

  1. UVaLive 3126 Taxi Cab Scheme (最小路径覆盖)

    题意:有 n 个客人,要从 si 到 ti,每个人有一个出发时间,现在让你安排最少和出租车去接,在接客人时至少要提前一分钟到达客人的出发地点. 析:把每个客人看成一个结点,然后如果用同一个出租车接的话 ...

  2. Github 的注册教程和初步使用体验

    我叫许晴,是网工143的学生,学号是1413042064,兴趣包括手绘,看书和手游.学习过c++和汇编语言课程,但在编程方面没什么独立实践经验. 我的Githup用户名是 XQ123 .下面是我在gi ...

  3. [C#]安装WindowsService的关键步骤

    使用.Net编写好了WindowsService以后,不安装到系统里就没有任何作用. [添加Installer] 在服务的设计器画面,属性页面里,选择[Add Installer]链接. 如此便会生成 ...

  4. ajax 的前进 后退 问题 jquery.history

    本文的前提是基于后台的,所以这里不会考虑seo的问题.同时,基于后台的管理系统,也不需要被收藏,所以也不会考虑刷新的这种类似直接敲网址的情况!!! 这里使用的是html5中的history.state ...

  5. C#语言各个版本特性(二)

    二.排序Product 1.按名称对产品进行排序,以特定顺序显示一个列表的最简单方式就是先将列表排序,再遍历并显示其中的项. C#1.1 使用IComparer对ArrayList进行排序 produ ...

  6. .net使用QQ邮箱发送邮件

    /// <summary> /// 发送邮件 /// </summary> /// <param name="mailTo">要发送的邮箱< ...

  7. StarUML3.0选择不同类型图和导出

    StarUML(简称SU),是一种创建UML类图,生成类图和其他类型的统一建模语言(UML)图表的工具. 可绘制9款UML图:用例图.类图.序列图.状态图.活动图.通信图.构件图.部署图以及复合结构图 ...

  8. UWP开发入门(二)——RelativePanel

    RelativePanel也是Win10 UWP新增的控件,和上篇提到的SplitView一样在UWP的UI布局起到非常重要的作用.说句实在话,这货其实就是为了UWP的Adaptive UI而特意增加 ...

  9. 手动开发PHP模板引擎 一 (35)

    模板叫做TPL,模仿于smarty模板引擎. 我们所说的模板是Web模板,是主要由HTML标记组成的语言来编写的页面,但也有如何表示包含动态生成内容的方式(解析标签).模板引擎是一种软件库,允许我们从 ...

  10. thinkphp3搜索结果分页

    公司的办公室搬到武昌,办公室水不好喝 还是乐百氏 娃哈哈的水我们oa用的tp3的一套oa,现在boss要求按状态 和类型(2个维度)来搜索案子 数量多,用 分页注意到初始的表单 input的name ...