zoukankan      html  css  js  c++  java
  • 利用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里配置一下

     1 <profiles>
     2         <profile>
     3             <id>test</id>
     4             <activation>
     5                 <activeByDefault>true</activeByDefault>
     6             </activation>
     7             <build>
     8                 <finalName>test</finalName>
     9                 <filters>
    10                     <filter>profiles/test.properties</filter>
    11                 </filters>
    12                 <resources>
    13                     <resource>
    14                         <directory>src/main/resources</directory>
    15                         <includes>
    16                             <include>**/*.*</include>
    17                         </includes>
    18                         <filtering>false</filtering>
    19                     </resource>
    20                     <resource>
    21                         <directory>src/main/resources</directory>
    22                         <includes>
    23                             <include>param.properties</include>
    24                         </includes>
    25                         <filtering>true</filtering>
    26                     </resource>
    27                 </resources>
    28             </build>
    29         </profile>
    30         <profile>
    31             <id>prod</id>
    32             <build>
    33                 <finalName>prod</finalName>
    34                 <filters>
    35                     <filter>profiles/prod.properties</filter>
    36                 </filters>
    37                 <resources>
    38                     <resource>
    39                         <directory>src/main/resources</directory>
    40                         <includes>
    41                             <include>**/*.*</include>
    42                         </includes>
    43                         <filtering>false</filtering>
    44                     </resource>
    45                     <resource>
    46                         <directory>src/main/resources</directory>
    47                         <includes>
    48                             <include>param.properties</include>
    49                         </includes>
    50                         <filtering>true</filtering>
    51                     </resource>
    52                 </resources>
    53             </build>
    54         </profile>
    55     </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达到差异化配置的方式.达到不同环境统一打包的效果.

  • 相关阅读:
    hdu5784 极角排序+two point
    极角排序理解
    计算多边形的面积模板
    18年CUG校赛--恶魔的序列
    二分图匹配模板
    POJ 2342 Anniversary party
    蓝桥杯真题-小计算器
    第八届蓝桥杯省赛真题题解
    Django具体操作(四)
    网络爬虫(三)
  • 原文地址:https://www.cnblogs.com/abcwt112/p/7152896.html
Copyright © 2011-2022 走看看