多個應用共享一套配置文件怎麼做

    上海客戶上線的這個產品直到現在都還有很多可以記錄的東西。今天來說點多套應用多套配置文件的事情。

    產品有多個應用,每個應用的配置文件還挺多的。客戶要求應用集羣化,我們的做法是部署多套應用,數據共享。比如我有一個wsp應用,8個節點,那就要8個工程包。其實我們有3種應用,總共就是要24個工程包(捂臉....),所以客戶說這樣不行,到時運維就很麻煩。也是的,單種應用的代碼全都相同的,就是若干配置不一樣。

    一開始在程序中是有標識符來指明節點在集羣中的身份的,每個節點的標識不能重複。我們使用的是weblogic,一個域只部署一個應用,客戶提出可以用ip+端口來標識一個應用,想法可以,實際過程中我們發現獲取端口是比較麻煩的,一個運行中的程序是不知道它所在的server的端口是多少。

    既然無法動態的知道服務器端口,那就人爲地在服務器上加標識,讓程序在啓動的時候從系統變量裏讀取。示例:

void initSeverFlag() {
		
	String serverFlag = System.getProperty("server.flag");
	if (StringUtils.isEmpty(serverFlag)) {
		logger.warn("-------------- 未能獲取唯一服務器標識,啓動失敗,請檢查wls或tomcat的啓動參數:-Dserver.flag--------------");
		System.exit(0);
	}
}


    很簡單的用System.getProperty("server.flag")中獲取。這傢伙可以獲取到JVM和操作系統的一些參數。例如:

java.version  Java 運行時環境版本 

java.vendor  Java 運行時環境供應商 

java.vendor.url  Java 供應商的 URL 

java.home  Java 安裝目錄 

java.vm.specification.version  Java 虛擬機規範版本 

java.vm.specification.vendor  Java 虛擬機規範供應 

java.vm.specification.name  Java 虛擬機規範名稱 

java.vm.version  Java 虛擬機實現版本 

java.vm.vendor  Java 虛擬機實現供應商 

java.vm.name  Java 虛擬機實現名稱 

java.specification.version  Java 運行時環境規範版本 

java.specification.vendor  Java 運行時環境規範供應商 

java.specification.name  Java 運行時環境規範名稱 

java.class.version  Java 類格式版本號 

java.class.path  Java 類路徑 

java.library.path  加載庫時搜索的路徑列表 

java.io.tmpdir  默認的臨時文件路徑 

java.compiler  要使用的 JIT 編譯器的名稱 

java.ext.dirs  一個或多個擴展目錄的路徑 

os.name  操作系統的名稱 

os.arch  操作系統的架構 

os.version  操作系統的版本 

file.separator  文件分隔符(在 UNIX 系統中是“/”) 

path.separator  路徑分隔符(在 UNIX 系統中是“:”) 

line.separator  行分隔符(在 UNIX 系統中是“/n”) 

user.name  用戶的賬戶名稱 

user.home  用戶的主目錄 

user.dir  用戶的當前工作目錄


    JVM中並沒有一個叫server.flag的參數呀。沒錯,這個是自定義的。在myeclipse中配置在這裏


    在weblogic中,找到/home/weblogic/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/bin下的startWeblogic.sh,編輯添加以下內容。


     需要注意的是變量都是以 -D 開頭的,但是getProperty時,不需要加上 -D ,否則取不到。

    這樣的話,我就可以把所有的配置文件都放在一起,命名時用和server.flag作爲前綴,程序load配置時,根據server.flag加載就沒錯了。比如,之前wsp1程序有個配置叫config.properties,wsp2程序也有個config.properties,兩個的代碼完全相同。所以現在就可以弄成wsp1_config.properties,wsp2_config.properties,放在一起,名爲"wsp1"的變量的服務器啓動時,自動地獲取到wsp1,自動根據wsp1去找wsp1_config.properties,照樣正常運行。

    如此一來,便實現了一套代碼,多套配置,減輕了升級時的壓力。一個好的程序不光要代碼好寫,還要設計合理,考慮到部署方便,拓展容易。

   

    元宵快到了,自從工作後就沒有回去過元宵,今天要和老婆一起回去。祝大家元宵快樂








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章