zoukankan      html  css  js  c++  java
  • maven多环境配置

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

    使用的开发工具为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

  • 相关阅读:
    LeetCode Single Number
    Leetcode Populating Next Right Pointers in Each Node
    LeetCode Permutations
    Leetcode Sum Root to Leaf Numbers
    LeetCode Candy
    LeetCode Sort List
    LeetCode Remove Duplicates from Sorted List II
    LeetCode Remove Duplicates from Sorted List
    spring MVC HandlerInterceptorAdapter
    yum
  • 原文地址:https://www.cnblogs.com/eoooxy/p/6874041.html
Copyright © 2011-2022 走看看