应用情景:在web开发过程有一种需求是迫切存在的,通常一个项目并不是一次性开发完成的,有些通用的参数为了测试可能会该来该去,比如说连接的数据源,想一想是不是在开发一个项目之前当需要数据的时候,如果没有太大的把握通常是不敢动线上数据库的,特别是操作数据库中的数据,因为稍有不当就会影响线上的其他服务。更常见的做法是在自己本地搭建一个数据库,然后随便整点数据进去,然后随便怎么搞都不用担心,那么问题来了当我们要使用线上数据库的时候,那么就要手动改下数据库配置,然后发现线上有问题又要本地调试的时候,通常又会切回本地数据库,然后就改,然后就重复的劳动。如果只有一个数据源,改个两次还觉得好玩,如果你的web应用用到多个(3,4个就够了),每一个的配置都要改来改去,这还只是数据源的配置,那么有时候线上和测试或开发的时候用到的一些配置参数,比如代理服务器的地址等,那么这些东西改起来会让你绝望。那么作为强大的项目构建工具Maven当然不允许这种事情发生,于是乎其集成了根据环境选择配置的功能,你只需要简单的配置一下就ok啦。通常按照下面的步骤:
1.在pom.xml文件中定义需要添加的环境名称(通常有dev、test、online等),这个名字可以随便起,当然聪明的你肯定会起个英文名。
<profiles>
<profile>
<id>online</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<env.conf.dir>online</env.conf.dir>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<env.conf.dir>test</env.conf.dir>
</properties>
</profile>
<profile>
<id>dev</id>
<properties>
<env.conf.dir>dev</env.conf.dir>
</properties>
</profile>
</profiles>
说明一下这里配置了online、test、dev三个环境,使用intellij的朋友会发现Maven Project面板的profiles下面会有这三个环境,如图
2.当然现在添加了这几个环境还够,然后需要有个地方去选择环境。同样是在pom.xml中配置:
<build>
<finalName>aName</finalName>
<resources>
<resource>
<directory>src/main/java</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>conf/${env.conf.dir}</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</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就可以了。
然后再运行jetty:run
就可以了。