在開發(fā)的過程中,經(jīng)常需要面對(duì)不同的運(yùn)行環(huán)境(開發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境、內(nèi)網(wǎng)環(huán)境、外網(wǎng)環(huán)境等等),在不同的環(huán)境中,相關(guān)的配置一般不一樣,比如大數(shù)據(jù)源配置、日志文件配置、以及一些軟件運(yùn)行過程中的基本配置。每次在不同環(huán)境部署程序時(shí),都需要修改相應(yīng)的配置文件,使之完成環(huán)境的配置。這么做存在一個(gè)比較大的問題:每次修改配置非常麻煩,而且配置錯(cuò)誤會(huì)產(chǎn)生不可預(yù)估的影響,比如,在發(fā)布大數(shù)據(jù)生產(chǎn)環(huán)境時(shí)用的大數(shù)據(jù)開發(fā)環(huán)境的配置還好,但如果在大數(shù)據(jù)開發(fā)環(huán)境下用大數(shù)據(jù)生產(chǎn)環(huán)境的數(shù)據(jù),將會(huì)造成大數(shù)據(jù)生產(chǎn)數(shù)據(jù)的污染,導(dǎo)致大數(shù)據(jù)生產(chǎn)環(huán)境崩潰。
在我們平常的java開發(fā)中,會(huì)經(jīng)常使用到很多配制文件(xxx.properties,xxx.xml),而當(dāng)我們?cè)诒镜亻_發(fā)(dev),測(cè)試環(huán)境測(cè)試(test),線上生產(chǎn)使用(product)時(shí),需要不停的去修改這些配制文件,次數(shù)一多,相當(dāng)麻煩?,F(xiàn)在,利用maven的filter和profile功能,我們可實(shí)現(xiàn)在編譯階段簡(jiǎn)單的指定一個(gè)參數(shù)就能切換配制,提高效率,還不容易出錯(cuò).
profile可以讓我們定義一系列的配置信息,然后指定其激活條件。這樣我們就可以定義多個(gè)profile,然后每個(gè)profile對(duì)應(yīng)不同的激活條件和配置信息,從而達(dá)到不同環(huán)境使用不同配置信息的效果。
修改yedian-page-web的pom.xml
<properties> <port>9105</port> </properties> <build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!-- 指定端口 --> <port>${port}</port> <!-- 請(qǐng)求路徑 --> <path>/</path> </configuration> </plugin> </plugins> </build> |
運(yùn)行tomcat7:run ,發(fā)現(xiàn)運(yùn)行結(jié)果是一樣的,因?yàn)閜ort是變量,而變量值是定義為9105。這其實(shí)就是我們之前學(xué)習(xí)的maven的變量。
那我們現(xiàn)在思考一下,如果這個(gè)端口在開發(fā)時(shí)使用9105,如果在生產(chǎn)環(huán)境(或其他環(huán)境)為9205呢?如何解決值的動(dòng)態(tài)切換呢?
這時(shí)我們修改pom.xml,增加profile定義
<profiles> <profile> <id>dev</id> <properties> <port>9105</port> </properties> </profile> <profile> <id>pro</id> <properties> <port>9205</port> </properties> </profile> </profiles> |
執(zhí)行命令 tomcat7:run -Ppro 發(fā)現(xiàn)以9205端口啟動(dòng)
執(zhí)行命令 tomcat7:run -Pdev 發(fā)現(xiàn)以9105端口啟動(dòng)
-P 后邊跟的是profile的id
如果我們只執(zhí)行命令tomcat7:run ,也是以9105啟動(dòng),因?yàn)槲覀円婚_始定義的變量值就是9105,就是在不指定profileID時(shí)的默認(rèn)值.
(1)我們?cè)趛edian-dao工程中src/main/resources下創(chuàng)建filter文
(2)filter文件夾下創(chuàng)建db_dev.properties ,用于配置開發(fā)環(huán)境用到的大數(shù)據(jù)庫
env.jdbc.driver=com.mysql.jdbc.Driver env.jdbc.url=jdbc:mysql://localhost:3306/yediandb?characterEncoding=utf-8 env.jdbc.username=root env.jdbc.password=123456 |
(3)filter文件夾下創(chuàng)建db_pro.properties
env.jdbc.driver=com.mysql.jdbc.Driver env.jdbc.url=jdbc:mysql://localhost:3306/yediandb_pro?characterEncoding=utf-8 env.jdbc.username=root env.jdbc.password=123456 |
(4)修改properties下的db.properties
jdbc.driver=${env.jdbc.driver} jdbc.url=${env.jdbc.url} jdbc.username=${env.jdbc.username} jdbc.password=${env.jdbc.password} |
修改pom.xml
<properties> <env>dev</env> </properties> <profiles> <profile> <id>dev</id> <properties> <env>dev</env> </properties> </profile> <profile> <id>pro</id> <properties> <env>pro</env> </properties> </profile> </profiles> |
這里我們定義了2個(gè)profile,分別是大數(shù)據(jù)開發(fā)環(huán)境和大數(shù)據(jù)生產(chǎn)環(huán)境
修改pom.xml ,在build節(jié)點(diǎn)中添加如下配置
<filters> <filter>src/main/resources/filters/db_${env}.properties</filter> </filters> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> |
這里我們利用filter實(shí)現(xiàn)對(duì)資源文件(resouces)過濾
maven filter可利用指定的xxx.properties中對(duì)應(yīng)的key=value對(duì)資源文件中的${key}進(jìn)行替換,最終把你的資源文件中的username=${key}替換成username=value
在yedian-dao 工程 執(zhí)行命令:package -P pro , 解壓生成的jar包,觀察db.properties配置文件內(nèi)容,已經(jīng)替換為生產(chǎn)環(huán)境的值。
在yedian-sellergoods-service工程 執(zhí)行命令 pageage ,解壓生成的war包里的yedian-dao的jar包,發(fā)現(xiàn)也是生成環(huán)境的值。
【1】連接大數(shù)據(jù)生產(chǎn)數(shù)據(jù)庫
(1)在yedian-dao 工程執(zhí)行命令:install-P pro
(2)在yedian-sellergoods-service:執(zhí)行命令:tomcat7:run
(3)在yedian-shop-web : 執(zhí)行命令:tomcat7:run
【2】連接大數(shù)據(jù)開發(fā)數(shù)據(jù)庫
(1)在yedian-dao 工程執(zhí)行命令:install-P dev (或 install )
(2)在yedian-sellergoods-service:執(zhí)行命令:tomcat7:run
(3)在yedian-shop-web : 執(zhí)行命令:tomcat7:run
(1)在yedian-common工程中properties下創(chuàng)建dubbox.properties
address=192.168.25.135:2181 |
(2)Spring目錄下創(chuàng)建spring配置文件 applicationContext-dubbox.xml 配置如下:
<dubbo:registry protocol="zookeeper" address="${address}"/> |
(3)所有的服務(wù)工程與web工程都要依賴yedian-common . 并刪除每個(gè)工程中關(guān)于注冊(cè)中心地址的配置
(4)安裝yedian-common到本地倉庫,然后測(cè)試運(yùn)行。
(1)在yedian-common工程中創(chuàng)建filters目錄,目錄下建立dubbox_dev.properties
env.address=192.168.25.135:2181 |
(2)建立dubbox_pro.properties
env.address=192.168.25.136:2181 |
(3)修改dubbox.properties
address=${env.address} |
(4)修改yedian-common的pom.xml
<properties> <env>dev</env> </properties> <profiles> <profile> <id>dev</id> <properties> <env>dev</env> </properties> </profile> <profile> <id>pro</id> <properties> <env>pro</env> </properties> </profile> </profiles> ............................. <build> <filters> <filter>src/main/resources/filters/dubbox_${env}.properties</filter> </filters> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> |