根据不同环境读取不同配置文件

在真正生产开发的时候,我们经常需要根据不同的环境来读取不同的配置文件,一是因为不同环境所连接的数据库、zk集群等地址或账户秘密不一样,二是不同环境的资源配置不一样,生产环境可能会有4个数据库,而开发环境有1-2个就够了。那么这次就总结一下以前用到过的不同环境不同配置的方法,其实方法不止一种,不过这种用习惯了,又怕以后往掉,所以记录一下,这本身不是什么技术性的难题,而是maven自身的特新,但是越是这种知识,被遗忘的概率越大,因为平时根本没有人注意的。
以下干货:
首先要有几个不同环境下的properties文件,如图
根据不同环境读取不同配置文件
文章图片

上图中开发环境我们可以将配置文件命名为config_dev.properties,其他环境同理,其实就是config_${env}.properties,当然名字是随便起的,只要能在打包的时候区分环境就行了。
接下来就是在pom文件中添加profiles配置,这个配置的作用就是在不同环境下激活不同的配置,当然不限于本文的这种情况,甚至可以根据不同的系统采用不同的配置,只要配置好就行了,如下图:
根据不同环境读取不同配置文件
文章图片


可以看到,图中不止有profiles的配置,还有build,这个是构建的时候所需的一些信息,也可以将build写在profile里面,但是这样需要每个环境都写一个build,在环境少的时候如果没有强迫症或洁癖,也不失为一种好的写法,但是如果环境多了,写起来会很恶心。
具体的每个元素的意义可以参考http://blog.csdn.net/tomato__/article/details/13625497 和 http://blog.csdn.net/taiyangdao/article/details/52374125
当然,在Spring中加载配置文件还要在.xml文件中加入以下内容:
根据不同环境读取不同配置文件
文章图片


至此,在package命令打包的时候可以通过-P test|dev|product等等来指定相应的配置。
另外,如果开发环境和正式环境的机器数不一样,可能相应的.xml文件的内容也不一样,这就需要根据不同的环境来加载不同的.xml文件,这个要怎么弄呢?其实方法很简单,首先是要有几个这样的文件夹来放置不同环境的文件,如图:
【根据不同环境读取不同配置文件】根据不同环境读取不同配置文件
文章图片


比如,不同环境下,MQ的配置文件是不同的,这个不同又无法通过读取不同的properties文件来区别,那么就要在构建的时候读取不同目录下的.xml文件,这个只要在之前的基础上在Spring的配置文件中加一个


这样打包的时候就会import不同的.xml文件了。

    推荐阅读