我们在开发项目的时候,往往会有好几个环境。比如开发、预发布(测试)、产品,每个环境一般用到配置都不一样,最典型的就是数据库,开发的数据库与产品的数据库肯定是不一样的,如果要多个环境的切换就得改配置,这样一来非常麻烦。然而程序员是一群非常会偷懒的家伙,于是就有了多环境配置这个功能,以上纯属我在胡说八道。。。

使用的开发工具为idea,一般来说我们都会在src/main/resources 目录下面建一个文件夹,里面分别放三个环境对应的文件dev、pre、pro,如下:

我们实际项目中引用的配置文件是config.properties

redis.host=${redis_host}
redis.port=${redis_port}
redis.password=${redis_password} driver=${db_driver}
url=${db_url}
username=${db_username}
password=${db_password}

把在config.properties文件中所有用到的变量都放到对于环境的文件夹中,例如dev.properties文件内容:

redis_host=127.0.0.1
redis_port=7777
redis_password=eoooxy db_driver=com.mysql.jdbc.Driver
db_url=jdbc:mysql://localhost:3306/anhoo
db_username=root
db_password=root

做好上面的准备工作之后,就需要在pom里面进行设置了三个环境对应的变量:

  <profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<env>dev</env>
<!--<redis_host>127.0.0.1</redis_host>-->
</properties>
</profile>
<profile>
<id>pre</id>
<properties>
<env>pre</env>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<env>pro</env>
</properties>
</profile>
</profiles>

以及在<build>节点里面添加:

<finalName>${project.artifactId}</finalName>

        <!-- 使用指定的filter进行过滤,在执行mvn命令的时候带上-Ppro就代表生产环境,就会加载生产环境的properties,-Pdev就代表开发环境(默认) -->
<filters>
<filter>src/main/resources/properties/env/${env}.properties</filter>
</filters> <!-- 资源文件位置src/main/resources/,这下面的资源文件的${}会全部被替换成filter中的标签内容。
directory指定的value会作为classes的资源跟目录,
比如指定:src/main/resources/,则classes下会出现jdbc等包,
若指定:src/main/resources/jdbc/,则classes下直接出现jdbc包下的文件,不会额外出现jdbc等其他包结构。因为他把jdbc作为了根目录
-->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<!--
exclude可以排除指定文件,支持通配符 ,匹配项不会生成到classes目录下,路径是以directory开始的
在这里就是directory(src/main/resources/)/properties/env/pro.properties
-->
<!--<excludes>-->
<!--<exclude>properties/env/pro.properties</exclude>-->
<!--</excludes>-->
</resource>
</resources>

当然我们也可以把所有的变量放在pom的环境分类的properties节点里面,如被注释的部分,这样一来也是可以的,当然如果这样做的话,filters部分就多此一举了,而且我们可以直接在.xml文件中进行这些变量的引用。两种方法效果都一样,没啥区别,就看个人爱好了。

打包命令:

mvn clean package -P(对应的环境的id,要把括号去掉且是紧挨着大写的P)

这样一来,打包好的war包,里面对应的配置就变了。。。

如果错误恳请指出,谢谢!!

参考:http://www.jianshu.com/p/5650e5738d30

maven多环境配置的更多相关文章

  1. maven(六),外置maven运行环境配置

    外置maven eclipse内置的maven插件是固定版本,如果要用其他版本的maven,可以使用外置maven 下载地址: http://maven.apache.org/download.cgi ...

  2. 架构实战项目心得(三):JAVA和MAVEN的环境配置

    1 java环境配置: 1 下载并安装jdk1.82 配置java环境变量: vi /etc/profile,在文件底部增加以下内容:export JAVA_HOME=/data/program/so ...

  3. TestNG+Maven+IDEA 环境配置+入门

    一.环境配置 1.安装IDEA(参考:https://blog.csdn.net/m0_38075425/article/details/80883078) 2.在Prefernces,通过Plugi ...

  4. Eclipse+Maven整合开发Java项目(一)➣Maven基础环境配置

    概述 Maven是一个Java语言编写的开源项目管理工具,是Apache软件基金会的顶级项目.主要用于项目构建,依赖管理,项目信息管理.有些项目需要添加响应的依赖包,Maven就是公用包集合.存在远程 ...

  5. springboot maven 多环境配置

    1.使用Intellij IDEA创建Spring Boot和Maven项目 2.Spring Boot项目下application.yaml(yaml支持中文)或者application.prope ...

  6. Maven多环境配置实战 filter

    目前在开发一个wap项目,主要有开发.测试和最终部署上线几个阶段,每个阶段对配置(数据库.日志)都有不同的设置.以前都是以开发环境为主,在测试和部署上线时由部署工程师负责修改配置并上线.但是公司并非都 ...

  7. Java开发学习(三十二)----Maven多环境配置切换与跳过测试的三种方式

    一.多环境开发 我们平常都是在自己的开发环境进行开发, 当开发完成后,需要把开发的功能部署到测试环境供测试人员进行测试使用, 等测试人员测试通过后,我们会将项目部署到生成环境上线使用. 这个时候就有一 ...

  8. Eclipse+Tomcat+MAVEN开发环境配置

    https://blog.csdn.net/zhshulin/article/details/30779873 补充: 1.eclipse配置tomcat window——preferences——s ...

  9. 慕课网maven多环境配置

    profile 下面的节点,是把profile 标签内容复制几份,并且需要把<activation> 去掉.在idea右侧 maven button 中会出现选择 节点. 接着打包命令和打 ...

随机推荐

  1. hdu 5672 String 尺取法

    String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem D ...

  2. 机器学习 MLIA学习笔记(二)之 KNN算法(一)原理入门实例

    KNN=K-Nearest Neighbour 原理:我们取前K个相似的数据(排序过的)中概率最大的种类,作为预测的种类.通常,K不会大于20. 下边是一个简单的实例,具体的含义在注释中: impor ...

  3. Ubuntu 14.04 vi 退格键不能删除字符

    执行命令 sudo apt-get install vim

  4. 01_DllZZ.cpp

    1. // DllZZ.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" ...

  5. SpringBoot开发案例之整合Kafka实现消息队列

    前言 最近在做一款秒杀的案例,涉及到了同步锁.数据库锁.分布式锁.进程内队列以及分布式消息队列,这里对SpringBoot集成Kafka实现消息队列做一个简单的记录. Kafka简介 Kafka是由A ...

  6. windows下的mongodb安装(真垃圾)

    一.下载 3.6下载安装会卡死.只能下3.4的.http://downloads.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-v3.4-la ...

  7. mysql 问题 Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdb

    异常错误:Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.c ...

  8. 3.2 x86体系结构

    计算机组成 3 指令系统体系结构 3.2 x86体系结构 X86是商业上最为成功,影响力最大的一种体系结构.但从技术的角度看,它又存在着很多的问题,那我们就来一起分析X86这种体系结构的特点. 要探讨 ...

  9. JQuery.Ajax()的data参数传递方式

    最近,新学c# mvc,通过ajax post方式传递数据到controller.刚开始传递参数,controller中总是为null.现记录一下,可能不全,纯粹记个学习日记. 重点在于参数的方式,代 ...

  10. codefroces 450B矩阵快速幂

    找出递推关系式就好了 (fi+1)=(1  -1)(fi  ) (    fi)=(1   0)(fi-1) 不会打矩阵将就着看吧... 这是第一道矩阵快速幂.细节还是有很多没注意到的 本来想看挑战写 ...