zoukankan      html  css  js  c++  java
  • 使用maven的profile构建不同环境配置

    基本概念说明(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 

    转自:https://www.cnblogs.com/wangyang108/p/6030735.html

  • 相关阅读:
    智能推荐算法演变及学习笔记(三):CTR预估模型综述
    从中国农业银行“雅典娜杯”数据挖掘大赛看金融行业数据分析与建模方法
    智能推荐算法演变及学习笔记(二):基于图模型的智能推荐(含知识图谱/图神经网络)
    (设计模式专题3)模板方法模式
    (设计模式专题2)策略模式
    (设计模式专题1)为什么要使用设计模式?
    关于macOS上常用操作命令(持续更新)
    记录下关于RabbitMQ常用知识点(持续更新)
    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
    SpringCloud教程二:Ribbon(Finchley版)
  • 原文地址:https://www.cnblogs.com/heqiyoujing/p/9505969.html
Copyright © 2011-2022 走看看