jackiechan1981
jackiechan1981
同问!公司的生产环境出现这个问题的频率好高,一直解决不了,打算转Apollo了!
@kingtiger2 看看你的情况是否跟我遇到过的一样 原因: disconf对应的Java类中有多余的属性,且属性是基本类型,比如int,当变量不赋值时是有默认值0的; 分析: 配置文件对应的Java类中有多余的属性,这个属性是在disconf-web的配置项中没有的,启动加载的时候是根据disconf-web中的配置值来赋值的,当没有值时,默认null,代码标签如下: com.baidu.disconf.client.store.processor.impl.DisconfStoreFileProcessorImpl.inject2Store(String, DisconfValue)  当往zookeeper上写数据的时候,是用了json格式化的,会把null属性过滤掉,这就是启动的时候并没有异常,代码如下: com.baidu.disconf.client.core.processor.impl.DisconfFileCoreProcessorImpl.updateOneConfFile(String, DisconfCenterFile)  当某些时候,应用和zookeeper的会话过期(disconf-client中的NodeWatch,监控到Expired事件后,重连zookeeper,重建配置文件在zookeeper上的节点),这个时候int类型的属性实际上已经被赋值0了,json格式化数据写入zookeeper时,这个0是会保留的,所以zookeeper上的数据就会和DB中的数据不一致了;