基本概念说明(resources、filter和profile): 
1.profiles定义了各个环境的变量id 
2.filters中定义了变量配置文件的地址,其中地址中的环境变量就是上面profile中定义的值 
3.resources中是定义哪些目录下的文件会被配置文件中定义的变量替换,一般我们会把项目的配置文件放在src/main/resources下,像db,bean等,里面用到的变量在打包时就会根据filter中的变量配置替换成固定值

在我们平常的java开发中,会经常使用到很多配制文件(xxx.properties,xxx.xml),而当我们在本地开发(dev),测试环境测试(test),线上生产使用(product)时,需要不停的去修改这些配制文件,次数一多,相当麻烦。现在,利用maven的filter和profile功能,我们可实现在编译阶段简单的指定一个参数就能切换配制,提高效率,还不容易出错,详解如下。

一,原理:

利用filter实现对资源文件(resouces)过滤

maven filter可利用指定的xxx.properties中对应的key=value对资源文件中的${key}进行替换,最终把你的资源文件中的username=${key}替换成username=value

利用profile来切换环境

maven profile可使用操作系统信息,jdk信息,文件是否存在,属性值等作为依据,来激活相应的profile,也可在编译阶段,通过mvn命令加参数 -PprofileId 来手工激活使用对应的profile 
结合filter和profile,我们就可以方便的在不同环境下使用不同的配制

二,配制: 
在工程根目录下添加3个配制文件:

config-dev.properties  -- 开发时用 
    config-test.properties  -- 测试时用 
    config-product.properties -- 生产时用

工程根目录下的pom文件中添加下面的设置:

<build>
<resources>
<!-- 先指定 src/main/resources下所有文件及文件夹为资源文件 -->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
<!-- 设置对auto-config.properties,jdbc.properties进行过虑,即这些文件中的${key}会被替换掉为真正的值 -->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>auto-config.properties</include>
<include>jdbc.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build> <profiles>
<profile>
<id>dev</id> <!-- 默认激活开发配制,使用config-dev.properties来替换设置过虑的资源文件中的${key} -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<filters>
<filter>config-dev.properties</filter>
</filters>
</build>
</profile>
<profile>
<id>test</id>
<build>
<filters>
<filter>config-dev.properties</filter>
</filters>
</build>
</profile>
<profile>
<id>product</id>
<build>
<filters>
<filter>config-product.properties</filter>
</filters>
</build>
</profile>
</profiles>

三,使用:

开发环境:

filter是在maven的compile阶段执行过虑替换的,所以只要触发了编译动作即可,如果像以前一样正常使用发现没有替换,则手工clean一下工程(eclipse -> Project -> Clean)【这里你应该要安装上maven插件,因为替换是maven做的,不是eclipse做的,所以这里的clean应当是触发了maven的compile】,然后在Tomcat上也右键 -> Clean一下即可,然后你去tomcat目录下会发现你的工程的资源文件里面的${key}被替换为对应的config-xx的值了 
如果上面还不行,那么就使用maven插件或者手工控制台下打maven编译命令吧 
因为pom.xml中设置了dev为默认激活的,所以默认会把config-dev拿来进行替换${key}

测试环境

手工编译,打包:maven clean install -Ptest -- 激活id="test"的profile

生产环境

手工编译,打包:maven clean install -Pproduct -- 激活id="product"的profile

最新文章

  1. GIS管网项目-flex/java
  2. python 下 tinker、matplotlib 混合编程示例一个
  3. SQL TOP 子句、SQL LIKE 操作符、SQL 通配符
  4. python_编程规范
  5. 有感于三个50岁的美国程序员的生活状态与IT职业杂想
  6. magento cache,magento index
  7. oracle 执行执行动态存储过程名---其实就是存储过程名是个字符串参数
  8. mysql 建立索引场合及索引使用
  9. sql 截取两个字符串之间的字符
  10. max_size, capacity and size 的区别
  11. NAND FLASH ECC校验原理与实现
  12. Spring 中出现Element : property Bean definitions can have zero or more properties. Property elements correspond to JavaBean setter methods exposed by the bean classes. Spring supports primitives, refer
  13. 【原创】驱动加载之OpenSCManager
  14. adb server version (31) doesn&#39;t match this client (40); killing...
  15. Hbase的写入负载均衡
  16. Codeforces 830D Singer House 动态规划
  17. git-04 同意分支合并
  18. [原创]WebScarab工具介绍
  19. Asp.Net Core2.0允许跨域请求设置
  20. iOS UITableView中关于cell里的按钮被点击时如何确定是哪一个section

热门文章

  1. JavaScript高级程序设计36.pdf
  2. (转)PQ分区魔术师中文版分区教程
  3. 1 weekend110的hdfs源码跟踪之打开输入流 + hdfs源码跟踪之打开输入流总结
  4. Caffe 在 Ubuntu 中安装
  5. hdoj 2063 过山车【匈牙利算法+邻接矩阵or邻接表】
  6. hdoj 1150 Machine Schedule【匈牙利算法+最小顶点覆盖】
  7. Js- 菜单
  8. 什么是jetty
  9. 会话数据的管理——Session
  10. C#中npoi操作Excel[版本2.0.1读写2003、2007格式]