多个应用共享一套配置文件怎么做

    上海客户上线的这个产品直到现在都还有很多可以记录的东西。今天来说点多套应用多套配置文件的事情。

    产品有多个应用,每个应用的配置文件还挺多的。客户要求应用集群化,我们的做法是部署多套应用,数据共享。比如我有一个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,照样正常运行。

    如此一来,便实现了一套代码,多套配置,减轻了升级时的压力。一个好的程序不光要代码好写,还要设计合理,考虑到部署方便,拓展容易。

   

    元宵快到了,自从工作后就没有回去过元宵,今天要和老婆一起回去。祝大家元宵快乐








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