做为一名程序员,在开发的过程当中,常常须要面对不一样的运行环境(开发环境、测试环境、生产环境、内网环境、外网环境等等),在不一样的环境中,相关的配置通常不同,好比数据源配置、日志文件配置、以及一些软件运行过程当中的基本配置。每次在不一样环境部署程序时,都须要修改相应的配置文件,使之完成环境的配置。这么作存在一个比较大的问题:每次修改配置很是麻烦,并且配置错误会产生不可预估的影响,好比,在发布生产环境时用的开发环境的配置还好,但若是在开发环境下用生产环境的数据,将会形成生产数据的污染,致使生产环境崩溃。html
目前JAVA相关的项目基本都是使用Maven来进行构建。在maven中实现多环境的构建可移植性须要使用profile,经过不一样的环境激活不一样的profile来达到构建的可移植性。mysql
1、pom中的profile配置程序员
首先是profile配置,在pom.xml中添加以下profile的配置:sql
<profiles> <profile> <!-- 测试环境 --> <id>test</id> <properties> <jdbc.username>ludidevelop</jdbc.username> <jdbc.password>Ludi@12345</jdbc.password> <jdbc.jdbcUrl>jdbc:mysql://10.77.55.161:3306/quicksureuat?allowMultiQueries=true</jdbc.jdbcUrl> <log.file.address>../logs/quickSureMobileServer.log</log.file.address> <exception.file.address>../logs/quickSureMobileServerError.log</exception.file.address> <jy.connect.username>xxbao1113_test</jy.connect.username> <jy.connect.password>xxbao1113_test</jy.connect.password> <sinosafe.synchronization.url>http://mtest.sinosafe.com.cn/quicksurepayment</sinosafe.synchronization.url> <sinosafe.asynchronous.url>http://mtest.sinosafe.com.cn/quicksurepolicy</sinosafe.asynchronous.url> <sinosafe.return.url>http://localhost:8989/ludiquickSureMobileServer/paymentCompleteServlet/goPaymentSucessPage.do</sinosafe.return.url> </properties> <!-- 默认环境,tomcat打包的时候也是读这个默认配置 --> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <!-- 生产环境 --> <id>product</id> <properties> <jdbc.username>quicksuredb%ludi</jdbc.username> <jdbc.password>quicksure@168</jdbc.password> <jdbc.jdbcUrl>jdbc:mysql://quicksuredb.mysqldb.chinacloudapi.cn:3306/quicksuredbpe?allowMultiQueries=true</jdbc.jdbcUrl> <log.file.address>/data/logs/quickSureMobileServer.log</log.file.address> <exception.file.address>/data/logs/quickSureMobileServerError.log</exception.file.address> <jy.connect.username>xxbao16328</jy.connect.username> <jy.connect.password>xxb!^#*16328</jy.connect.password> <sinosafe.synchronization.url>http://m.sinosafe.com.cn/quicksurepayment</sinosafe.synchronization.url> <sinosafe.asynchronous.url>http://m.sinosafe.com.cn/quicksurepolicy</sinosafe.asynchronous.url> <sinosafe.return.url>http://m.quicksure.com/ludiquickSureMobileServer/paymentCompleteServlet/goPaymentSucessPage.do</sinosafe.return.url> </properties> </profile> </profiles>
这里定义了两个环境,test(测试环境)、product(生产环境),其中开发环境是默认激活的(activeByDefault为true),这样若是在不指定profile时默认是开发环境。(默认环境,eclipse中tomcat打包的时候也是读这个默认配置)api
同时每一个profile还定义了多个属性,其中profiles.active表示被激活的profile的配置文件的目录。tomcat
2、在pom文件的build中配置eclipse
在某个resource中若是设置filtering为true,将会根据输入参数动态修改相关内容async
<resources> <resource> <directory>src/main/resources</directory> <!-- 在某个resource中若是设置filtering为true,将会根据输入参数动态修改相关内容 --> <filtering>true</filtering> </resource> </resources>
2、profile属性引用maven
profile中定义的属性,能够在.properties中用"${}"直接应用ide
下面贴一下在properties问价中怎么引用profile属性:
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}
jdbc.driver_class=com.mysql.jdbc.Driver
jdbc.jdbcUrl=${jdbc.jdbcUrl}
4、maven打包
maven打包时命令:mvn clean package -P profileid
参考文献: