为什么要用统一配置?

我们做项目时用到的配置比如数据库配置等...我们都是写死在项目里面,如果需要更改,那么也是的修改配置文件然后再投产上去,那么问题来了,如果做集群的呢,有100台机器,这时候做修改那就太不切实际了;那么就需要用到统一配置管理啦。

解决思路

1.把公共配置抽取出来

2.对公共配置进行维护

3.修改公共配置后应用不需要重新部署

采用方案

1.公共配置抽取存放于zookeeper中并落地数据库

2.对公共配置修改后发布到zookeeper中并落地数据库

3.对应用开启配置实时监听,zookeeper配置文件一旦被修改,应用可实时监听到并获取

下面基于zookeeper粗略实现了一个统一配置管理

需要用到的jar是zkclient

配置文件Config

package com.cwh.zk.util;import java.io.Serializable;public class Config implements Serializable{/*** */private static final long serialVersionUID = 1L;private String userNm;private String userPw;public Config() {}public Config(String userNm, String userPw) {this.userNm = userNm;this.userPw = userPw;}public String getUserNm() {return userNm;}public void setUserNm(String userNm) {this.userNm = userNm;}public String getUserPw() {return userPw;}public void setUserPw(String userPw) {this.userPw = userPw;}@Overridepublic String toString() {return "Config [userNm=" + userNm + ", userPw=" + userPw + "]";}}

配置管理中心ZkConfigMag

package com.cwh.zk.util;import org.I0Itec.zkclient.ZkClient;public class ZkConfigMag {private Config config;/*** 从数据库加载配置*/public Config downLoadConfigFromDB(){//getDBconfig = new Config("nm", "pw");return config;}/*** 配置文件上传到数据库*/public void upLoadConfigToDB(String nm, String pw){if(config==null)config = new Config();config.setUserNm(nm);config.setUserPw(pw);//updateDB}/*** 配置文件同步到zookeeper*/public void syncConfigToZk(){ZkClient zk = new ZkClient("localhost:2181");if(!zk.exists("/zkConfig")){zk.createPersistent("/zkConfig",true);}zk.writeData("/zkConfig", config);zk.close();}
}

应用监听实现ZkGetConfigClient

package com.cwh.zk.util;import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;public class ZkGetConfigClient {private Config config;public Config getConfig() {ZkClient zk = new ZkClient("localhost:2181");config = (Config)zk.readData("/zkConfig");System.out.println("加载到配置:"+config.toString());//监听配置文件修改zk.subscribeDataChanges("/zkConfig", new IZkDataListener(){@Overridepublic void handleDataChange(String arg0, Object arg1)throws Exception {config = (Config) arg1;System.out.println("监听到配置文件被修改:"+config.toString());}@Overridepublic void handleDataDeleted(String arg0) throws Exception {config = null;System.out.println("监听到配置文件被删除");}});return config;}public static void main(String[] args) {ZkGetConfigClient client = new ZkGetConfigClient();client.getConfig();System.out.println(client.config.toString());for(int i = 0;i<10;i++){System.out.println(client.config.toString());try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

测试,启动配置管理中心

package com.cwh.zkConfig.test;import com.cwh.zk.util.Config;
import com.cwh.zk.util.ZkConfigMag;public class ZkConfigTest {public static void main(String[] args) {ZkConfigMag mag = new ZkConfigMag();Config config = mag.downLoadConfigFromDB();System.out.println("....加载数据库配置...."+config.toString());mag.syncConfigToZk();System.out.println("....同步配置文件到zookeeper....");//歇会,这样看比较清晰try {Thread.sleep(10000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}mag.upLoadConfigToDB("cwhcc", "passwordcc");System.out.println("....修改配置文件...."+config.toString());mag.syncConfigToZk();System.out.println("....同步配置文件到zookeeper....");}}

测试结果:

配置管理中心打印:

应用监听:

ok!粗略实现,如有不足之处望指正

基于zookeeper实现统一配置管理相关推荐

  1. Zookeeper与统一配置管理

    目录 统一配置管理简介 代码开发 注意:本文参考  什么是ZooKeeper? 基于zookeeper实现统一配置管理_菜 头的博客-CSDN博客_zookeeper统一配置管理 统一配置管理简介 比 ...

  2. 基于ZooKeeper的分布式Session实现

    基于ZooKeeper的分布式Session实现 [转 http://blog.csdn.net/jacktan/article/details/6112806] 认识ZooKeeper ZooKee ...

  3. Java Web学习总结(20)——基于ZooKeeper的分布式session实现

    1.   认识ZooKeeper ZooKeeper-- "动物园管理员".动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始 ...

  4. 基于zookeeper的solrCloud集群搭建

    转自:https://blog.csdn.net/yougoule/article/details/78445759  基于原文对实践遇到的问题稍作补充 1.安装及搭建相关环境 1.1环境准备 cen ...

  5. ieee39节点系统介绍_Java秒杀系统实战系列-基于ZooKeeper的分布式锁优化秒杀逻辑...

    本文是"Java秒杀系统实战系列文章"的第十六篇,本文我们将继续秒杀系统的优化之路,采用统一协调调度中心中间件ZooKeeper控制秒杀系统中高并发多线程对于共享资源~代码块的并发 ...

  6. 基于zookeeper实现分布式配置中心(二)

    上一篇(基于zookeeper实现分布式配置中心(一))讲述了zookeeper相关概念和工作原理.接下来根据zookeeper的特性,简单实现一个分布式配置中心. 配置中心的优势 1.各环境配置集中 ...

  7. 基于zookeeper实现分布式配置中心(一)

    最近在学习zookeeper,发现zk真的是一个优秀的中间件.在分布式环境下,可以高效解决数据管理问题.在学习的过程中,要深入zk的工作原理,并根据其特性做一些简单的分布式环境下数据管理工具.本文首先 ...

  8. java实现系统参数的存储_基于ZooKeeper,Spring设计实现的参数系统

    一.简介 基于ZooKeeper服务端.ZooKeeper Java客户端以及Spring框架设计的用于系统内部进行参数维护的系统. 二.设计背景 在我们日常开发的系统内部,开发过程中最常见的一项工作 ...

  9. 基于ZooKeeper的分布式锁和队列

    分布式锁的几种实现: 1.zookeeper分布式锁,基于自增节点 2.Redis分布式锁,基于setnx命令, 基于Redis实现分布式锁:http://blog.csdn.net/daiyudon ...

  10. 基于Linux搭建开源配置管理中心apollo

    基于Linux搭建开源配置管理中心apollo 什么是apollo Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境.不同集群的配置,配置修改后能 ...

最新文章

  1. LeetCode14.最长公共前缀 JavaScript
  2. 放置奇兵 新 粉石墨
  3. 绝对定位元素设置水平居中
  4. akka kafka java_当使用websocket连接时,使用akka-stream-kafka从kafka主题获取最后一条消息...
  5. java url 短链接_推荐几个官方腾讯短链接url接口(含PHP演示代码)
  6. 【★】EIGRP终极解析!
  7. C语言嵌入汇编指令(asm)查询系统时间
  8. php主控,IcePHP框架中的快速后台中的通用CRUD功能框架(五) SCrud 主控类
  9. 下一站,人到三十而立之年有感!
  10. Map.getOrDefault()的返回类型问题
  11. 搜狐CEO张朝阳决定分拆网游业务单独上市
  12. 【实习日报】2019年4月上半月 前端开发实习工作日报汇总
  13. 导出pdf内容包换特殊符号,或转行符号等解决方法
  14. 分布式学习(3)etcd@2@HTTP API v2
  15. CCF大专委2020年大数据发展趋势预测
  16. git小乌龟TortoiseGit的使用
  17. 99%的人都理解错了HTTP中GET与POST的区别
  18. 桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进
  19. Spring 框架远程代码执行漏洞(CVE-2022-22965)
  20. 【人工智能哲学01/2】人工智能前世今生

热门文章

  1. python 打开文件夹与开启文件的几种方式
  2. 数据分析~中国五大城市PM2.5数据分析01
  3. hermite spline
  4. mysql字符集异常_mysql字符集设置出错问题
  5. 铭soft理解图5.0
  6. mysql特性绕过安全狗_【经验总结】SQL注入Bypass安全狗360主机卫士
  7. 利用手机传感器测量高度
  8. Contextual Parameter Generation for Knowledge Graph Link Prediction
  9. 怎么用c语言解三元二次方程组,三元二次方程组解法
  10. undo和redo日志