类加载变量导致的问题
因为项目需要,银行要求使用weblogic部署并且启动所有项目,不允许项目单独开服务启动一般都有这样的要求,我所在的项目组有两个单独main方法启动的服务,经过改造变成了可以部署在weblogic启动的web服务,其中一个网关接口服务,依赖于银行方提供的总线ESB服务,发送接口实现和其他系统交互,这中间存在需要行方提供的esb.jar这个jar包,以及行方提供的esbclient.properties配置文件。
- 如下是行方提供的jar文件java类读取esbclient.properties事例代码
public class ClientEngine{
private static String envProperties = "esbclient.properties";
private static String envProperties = "mssterkey.properties";
private static String clientPath = "esb.client.path";
...
static{
String path = System.getProperty(clientPath);
if(log.isDebugEnabled()){
log.debug(clientPath + "=" + path);
}
if((path != null)&&(!path.equals(""))){
File f = new File(path + File.separator + envProperties);
...
}
}
}
- 而esbclient.properties是个文件,里面定义的参数也是类似client.protocol=HTTP
这种,上面这段代码就带来一个问题,读取配置文件的是先读取path,也就是根据我们指定的clientPath去找到esbclient.properties,然后再去读取properties文件里面的配置项,但是因为这个读取的配置是写在static块里面的,这个就需要我们一启动weblogic就需要把clientPath这个指定的esb.client.path传进去,不然永远无法取到这个值。
找到问题根源,接下来就是如何解决它,其实很简单,只需要将这两个配置文件放置到服务器配置文件路径,在weblogic启动的bin目录下,有个配置文件叫setDomainEnv.sh的脚本,要解决这个启动的时候就传递这个path进去只需要把这个参数当作JVM的参数传入就行,但这个不是classLoader动态加载的所以只能给死路径,所以只需要写**-Desb.client.path=/wls/config**。然后这个路径存放这两个配置文件,启动weblogic,可以在nohup文件开头看到这个参数被当作JVM的参数传入了,问题得到解决。
转载请注明出处!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)