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

  • 相关阅读:
    解决ORA01502 state unusable错误成因
    Remoting.Corba
    NHibernate 处理 oracle 的long数据类型
    NET下连接SYBASE数据库
    JavaScript 的变量作用域及闭包
    PowerDesigner的样式设置
    NHibernate学习 (转)
    性能调优:数据库设计规范化的五个要求
    利用 ADO.NET 连接到 Informix(转)
    sqlnet.expire_time
  • 原文地址:https://www.cnblogs.com/eoooxy/p/6874041.html
Copyright © 2011-2022 走看看