基于ZooKeeper,Spring设计实现的参数系统 (3)

ParamCenterStore.java 对ZooKeeper参数服务端获取的参数信息做缓存,并且将对应的使用该参数的Bean属性表达式统计,方便ZooKeeper参数变更时回调使用。

PczkConstants.java 系统内常量字符窜整合。

PczkStringValueResolver.java 表达式解析统一接口

PczkPropertyPlaceholderConfiguer.java 实现Spring扩展点BeanFactoryPostProcessor,通过该扩展点对BeanDefinition配置元信息做解析以及变更。

PropertyPlaceholderHelper.java 具体实现zk{}表达式解析规则。

PczkBeanDefinitionVisitor.java 对Spring IoC容器内的BeanDefinition属性配置信息做解析,主要结合PczkPropertyPlaceholderConfiguer.java使用。

test目录下包含一部分测试代码,可以自行查看

  客户端代码实现简介:

  根据上述需求,客户端代码需要具备的能力包括:

与ZooKeeper服务器的连通,并获取参数信息

Spring xml中zk{}表达式的解析

多样化的参数配置,支持字符窜,对象,数组

ZooKeeper参数变更回调,维护参数信息

  针对上面4种要求,在开发时使用以下解决办法:

使用ZooKeeper Java客户端;

结合Spring的扩展点BeanFactoryPostProcessor;

在ZooKeeper服务端节点内设置数据时设置字符窜/JSON对象字符窜或者是JSON数组字符窜,客户端使用数据时分别配置为zk{param},zk{param.key},zk{param[i]},通过对zk{}表达式解析判断ZooKeeper参数格式,若为JSON字符窜使用FastJSON对字符窜做解析,访问对应属性值;

针对参数变更回调,在解析zk{}表达式时拼接出了可以访问到对应bean属性的SpEL表达式,通过SpEL表达式访问bean属性调用setter方法,因此属性操作也受到SpEL表达式的限制。在个别情况下,由于参数的变更可能需要别的一下操作处理,比如重新建立连接,这个可以自行扩展代码,比如比较上一次的值和当前值是否一致,不一致做出新的操作(现在也在设想怎么可以自动识别进行额外操作)。

  客户端详细实现源码下载:访问GitHub项目(注释还是比较清晰的)

七、说明

  本人技术有限,上述有错误的理解欢迎指出,共同交流学习,若对上述说明不了解,建议先学习一点Spring IoC设计,学习地址:https://docs.spring.io/spring/docs/4.3.19.RELEASE/spring-framework-reference/htmlsingle,若对于客户端的设计有好的建议可以提出来,共同讨论。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygfzs.html