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

  Java应用端常用的技术之一便是Spring框架,也符合低侵入的设计原则,在使用Spring开发过程中,常用的功能之一便是使用${}引用properties配置文件内的参数,如此方便的参数配置方式,我决定使用类似的方式,配置方式为zk{}(zk表示ZooKeeper参数),故客户端的设计是基于Spring的设计。

四、系统技术组合

  ZooKeeper集群 + ZooKeeper Java客户端 + Spring BeanFactoryPostProcessor扩展点 + JSON字符窜解析 + Spring SpEL表达式

五、设计实现(重点)

  根据上述设计说明等信息,最后得出这样一个系统,基于ZooKeeper参数存储,Spring客户端使用zk{}进行参数配置的参数中心系统。

服务端

  服务端设计如3-1图所示(在实际开发过程中可能稍有变动)

客户端(重点)

  在进行参数中心系统客户端实现之前,我们先了解一点Spring框架的基础知识。

  在Spring框架开发过程中,最常用的配置是<bean/>标签的使用,在工作中,最常听的一种说法是,在xml里配置上就可以使用bean了,就有对象了,这种理解潜在一层含义xml直接配置成了java bean,而实际上,Spring中bean的定义最终表现为BeanDefinition对象,个人理解为xml实际配置的是bean的说明信息,Spring将这些说明信息转换为了BeanDefinition对象,再由BeanDefinition生成了我们最终看到的bean,实际流程为[xml配置->BeanDefinition->Bean]而一般开发者不知道BeanDefinition,故理解含义成了[xml配置->Bean],中间缺少了重要的环节。在BeanDefinition到Bean这个过程中,Spring由BeanFactory生成实际的bean,在实际bean产生前,Spring提供了BeanFactoryPostProcessor扩展点(类似还有BeanPostProcessor),通过该扩展点可以获取到配置的BeanDefinition信息,用于自定义扩展对bean定义变更修改,实现自由控制。

  Spring允许开发者实现自定义的扩展点,实现特定的接口,使用通用的配置即可注册一个扩展点到Spring容器内。详细学习参考。

  参数中心系统参数的配置实现参考了Spring的${}参数配置,我们对${}的实现做简单学习。${}的实现便使用了Spring扩展点BeanFactoryPostProcessor,开发中常见配置如下:

  

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

  

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

  上图中采用了context:property-placeholder标签配置,根据Spring context的xsd说明文件,我们知道了property-placeholder对应的实际类为org.springframework.context.support.PropertySourcesPlaceholderConfigurer,context:property-placeholder配置实际为在spring容器内注册一个扩展点,实现${}表达式的解析实现类图以及调用流程大致如下,再详细过程查看源码,(有句话叫做师傅领进门,修行在个人):

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

  参数中心系统客户端的实现代码与上述实现类似,不同的是properties配置文件变成了ZooKeeper参数存储,${}变成了zk{}。

  客户端项目名称:itwatertop-pczk-client

管理端

  基于H5的管理页面设计,详细情况还未设想(先实现了主要的服务端客户端,管理端暂时可以使用ZooKeeper的客户端)。 

六、客户端设计源码

  客户端程序结构如下:

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

  文件说明:

BaseLoader.java 数据加载基类

ZookeeperDataLoader.java Java ZooKeeper客户端实现数据加载,参数更新回调。

PlaceholderMsg.java zk{zkexp} zk配置表达式解析结果,以及使用该表达式的bean属性获取SpEL表达式。

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

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