关于Maven使用不同环境进行配置的问题

应用情景:在web开发过程有一种需求是迫切存在的,通常一个项目并不是一次性开发完成的,有些通用的参数为了测试可能会该来该去,比如说连接的数据源,想一想是不是在开发一个项目之前当需要数据的时候,如果没有太大的把握通常是不敢动线上数据库的,特别是操作数据库中的数据,因为稍有不当就会影响线上的其他服务。更常见的做法是在自己本地搭建一个数据库,然后随便整点数据进去,然后随便怎么搞都不用担心,那么问题来了当我们要使用线上数据库的时候,那么就要手动改下数据库配置,然后发现线上有问题又要本地调试的时候,通常又会切回本地数据库,然后就改,然后就重复的劳动。如果只有一个数据源,改个两次还觉得好玩,如果你的web应用用到多个(3,4个就够了),每一个的配置都要改来改去,这还只是数据源的配置,那么有时候线上和测试或开发的时候用到的一些配置参数,比如代理服务器的地址等,那么这些东西改起来会让你绝望。那么作为强大的项目构建工具Maven当然不允许这种事情发生,于是乎其集成了根据环境选择配置的功能,你只需要简单的配置一下就ok啦。通常按照下面的步骤:

1.在pom.xml文件中定义需要添加的环境名称(通常有dev、test、online等),这个名字可以随便起,当然聪明的你肯定会起个英文名。
<profiles>
    <profile>
        <id>onlineid>
        <activation>
            <activeByDefault>trueactiveByDefault>
        activation>
        <properties>
            <env.conf.dir>onlineenv.conf.dir>
        properties>
    profile>
    <profile>
        <id>testid>
        <properties>
            <env.conf.dir>testenv.conf.dir>
        properties>
    profile>
    <profile>
        <id>devid>
        <properties>
            <env.conf.dir>devenv.conf.dir>
        properties>
    profile>

profiles>

说明一下这里配置了online、test、dev三个环境,使用intellij的朋友会发现Maven Project面板的profiles下面会有这三个环境,如图
关于Maven使用不同环境进行配置的问题_第1张图片

2.当然现在添加了这几个环境还够,然后需要有个地方去选择环境。同样是在pom.xml中配置:

<build>
        <finalName>aNamefinalName>
        <resources>
            <resource>
                <directory>src/main/javadirectory>
            resource>
            <resource>
                <directory>src/main/resourcesdirectory>
            resource>
            <resource>
                <directory>conf/${env.conf.dir}directory>
            resource>
        resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>2.5.1version>
                <configuration>
                    <source>1.6source>
                    <target>1.6target>
                    <encoding>UTF-8encoding>
                configuration>
            plugin>
        plugins>
    build>

上面的directory中通过使用${env.conf.dir}来进行选择比如如果在intellij中勾选dev的话,那么这里env.conf.dir的值就是dev,然后加上路径前缀就是conf/dev跟pom.xml文件同目录下的conf/dev文件夹下就是配置文件所在的位置。因此首先必须要建一个这样的目录了,当然这里使用的是conf这个目录可以随便建,只要你这里对应的配置好就行了。

3.当然找到对应的目录里面的文件就可以自己定义了,通常不同环境的定义的文件都是一样的而且以.propertise结尾,只是文件中的内容不相同。conf/dev只是说明了配置文件所在的目录,但是要使用这个文件还需要一个地方将这个文件添加到工程中去,如果使用的spring的话,这件事情通常是在spring的配置文件来做的


    <context:property-placeholder location="classpath*:*.properties" />

    <context:component-scan base-package="aName">
    context:component-scan>

这样classpath路径下所有的.properties文件都可以在程序中用了,具体怎么使用,通常是通过@Value("${aName:defalutValue}")注入到java程序中去,spring会将在.properties文件中定义的变量注入到程序中去。其中aName是变量名,:defaultValue用来配置默认值。

4.配置好之后,在环境切换过程中(就是在intelij中用鼠标点击勾选dev、online、test的时候),记住一定要clean一下,然后再重新build就可以了。具体怎么clean其实也很简单,如果不习惯命令行,只需要双击一下图中的clean就可以了。
关于Maven使用不同环境进行配置的问题_第2张图片
然后再运行jetty:run就可以了。

你可能感兴趣的:(Maven)