如下的环境信息:
dev 开发环境
sit sit测试环境
uat uat测试环境
pre 预生产测试环境
prod 线上的生产环境
各环境的数据库配置完全不一样,还有一些配置,是依赖对应环境的内部系统,如在uat环境布署
的电子商务系统,就需要配置uat环境的订单处理系统,而不能调用dev环境的订单系统.
对于这种需求,有两种处理方式:
第一种,在proterties文件里使用${}变量,使用maven的filter进行赋值
http://maven.apache.org/shared/maven-filtering/
http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
//test.properties jdbcname=${user_name} jdbcpasswd=${user_passwd}
这种变量在打包时,由maven从另一个依赖环境的配置文件里读出并赋值
比如
//在目录main/resources/sit/下 //env.properties user_name=user_sit user_passwd=passwd_sit ctx=somepath
//在目录main/resources/uat/下 //env.properties user_name=user_uat user_passwd=passwd_uat ctx=
......
配置五个对应的配置,然后在build配置里配置filter
... src/main/resources/${env}/env.properties ... src/main/resources true
然后添加maven profile配置,每个环境对应一个profile
dev dev true sit sit uat uat pre pre prod prod
//打包命令 打包uat环境的配置 mvn clean package -Puat
这时最终的配置文件test.properties里的属性会被替换为
//test.properties jdbcname=user_uat jdbcpasswd=passwd_uat
stackoverflow里web资源的替换
对于web资源,比如放到webapp目录下的js文件,不同的环境,需要用到不同的文件,可以使用
maven-war-plugin在打包时进行配置,
比如,我们在src/main/resources/目录下新建web目录,用于存放需要复制到webapp目录里的文件
比如我有个config.json文件,这个文件在dev sit uat prod 环境里都不一样
最终webapp目录结构如下:
├─META-INF ├─static │ ├─bootstrap │ │ └─2.3.2 │ │ ├─css │ │ │ bootstrap-responsive.min.css │ │ │ bootstrap.min.css │ │ │ │ │ ├─img │ │ │ glyphicons-halflings-white.png │ │ │ glyphicons-halflings.png │ │ │ │ │ └─js │ │ bootstrap.min.js │ │ │ ├─images │ │ favicon.ico │ │ │ ├─jquery │ │ config.json //该文件在各个目录里的配置都不一样 │ │ jquery-1.9.1.min.js │ │ │ ├─jquery-validation │ │ └─1.11.1 │ │ │ jquery.validate.min.js │ │ │ messages_bs_zh.js │ │ │ validate.css │ │ │ │ │ └─images │ │ unchecked.gif │ │ │ └─styles │ default.css │
config.json文件内容为
{ prefix:"old value", path:"/upload/path" }
创建src/main/resources/web/资源目录,目录结构如下:
└─static └─jquery config.json
config.json文件内容为
{ prefix:"${ctx}", path:"/upload/path" }
org.apache.maven.plugins maven-war-plugin 2.4 ${project.artifactId} src/main/resources/env/application-${env}.properties src/main/resources/web true
在执行 mvn package -Pprofile命令时,config.json里变量的值会被相应的替换和合适的值
第二种,使用maven-resources-plugin 的copy方式,将对应环境的配置对整个目录和文件进行覆盖。
http://maven.apache.org/plugins/maven-resources-plugin/examples/copy-resources.html
dev dev true sit sit uat uat pre pre prod prod
.... .... maven-resources-plugin 2.7 copy-resources process-resources copy-resources ${basedir}/target/classes/ src/main/resources/${env}/ true
//打包命令 打包uat环境的配置 mvn clean package -Puat