本篇文章主要讲述如何使用zookeeper实现配置中心,以及在修改配置信息时热更新至项目中,无需重启项目即可得到最新的配置信息。
1、自定义Spring加载配置文件的方式
(1)在Spring配置文件声明自定义的配置文件类
ZookeeperPropertiesConfigure
(2)编写自定义的配置类ZookeeperPropertiesConfigure并继承自 org
. springframework
. beans
. factory
. config
.PropertyPlaceholderConfigurer类,重写父类中的mergeProperties方法,源码如下:
ZookeeperConfig.getConfig()代码如下,listener()方法后面会讲到:
代码意思是首先从系统配置中如tomcat配置中找到zkHost声明zookeeper地址如“
192.168.0.23:2181
”,构建zookeeper连接客户端,根据ZookeeperPropertiesConfigure中配置的初始参数locationList到zookeeper找到名称为该值的znode,并读取该znode的值,该znode的键值对就是我们需要的配置信息,将配置数据封装成properties并放入mergeProperties中,至此Spring就可以加载配置信息了,在java类中直接使用@value注解,在spring配置中使用如
${dubbo.order.group:order}来获取配置信息。
2、编写zookeeperFactory用于构建zookeeper客户端,代码如下:
可以使用如下代码获取配置值
zookeeper的maven配置:
<
dependency
>
<
groupId
>
org.apache.zookeeper
groupId
>
<
artifactId
>
zookeeper
artifactId
>
<
version
>
3.4.8
version
>
dependency
>
3、在zookeeper上注册监听事件
这是zookeeper的内置功能,可以监听znode上值的更新或删除时通知客户端,通过这个特性可以实现配置文件的热更新功能。
所以我们要做的是编写listener方法,代码如下:
思路是在znode上添加一个监听事件,znode调用
getData()方法会监听znode的删除与更新事件,当监听事件触发时重新加载数据并将值写入properties中。
4、安装部署Zkui
Zkui
是一个允许在
zookeeper
上进行增删查改操作的图形管理工具,利用它我们可以编辑配置信息。
1)
拉取代码
#git clone https://github.com/DeemOpen/zkui.git
2)
构建并安装程序
#cd zkui/
#yum install -y maven
#mvn clean install
3)
修改配置文件
#cp config.cfg target/
#cd target/
#vim config.cfg
serverPort=9090 #
指定启动端口
zkServer=192.168.0.23:2181 #指定zookeeper地址
userSet = {"users": [{ "username":"admin" , "password":"admin","role": "ADMIN" },{ "username":"appconfig" , "password":"appconfig","role": "USER" }]} #
设置登录用户及其权限
4)
启动程序
#nohup java -jar zkui-2.0-SNAPSHOT-jar-with-dependencies.jar &
5)
用浏览器访问,地址是: http://192.168.0.23:9090
,访问后的页面如下,点击name就可以在编写配置信息了,注意跟你
ZookeeperPropertiesConfigure中配置的
locationList参数名匹配哟,不然取不到配置信息。
总结:要实现配置文件热更新,需要了解spring加载配置文件的流程从而重写配置加载类,修改成从zookeeper中加载数据,第二要了解zookeeper数据存储的方式以及监听事件的使用。