开源配置管理工具config-toolkit 使用心得

这是本人第一次写博,有不当之处敬请指正

首先感谢config-toolkit 开发者 wangyuxuan

由于分布式项目修改某个值,就需要所有应用中的配置均需要修改, 所以项目需要将配置集中管理,在wangyuxuan大哥的帮助下,顺利完成了config-toolkit与项目集成,本文是个人在集成config-toolkit时的心得

 

config-toolkit 下载地址:https://github.com/dangdangdotcom/config-toolkit 在此地址中作者介绍了config-toolkit的作用以及使用

本文在此基础上进行详细集成说明:

开发环境:win7、jdk1.6、spring3.2、tomcat7、zookeeper3.3.6

配置文件类型; *.properties

 

本人项目中使用config-toolkit特点:

实现配置热更新 (举例; 应用中上传文件的路径需要修改,无需停服务就可以实时更改)版本控制,支持灰度发布 (举例:多个应用使用不同的配置,可以快速从测试环境的配置更改到正式环境的配置)

 

一、搭建ConfigWeb环境,用于管理ZK中的配置信息

搭建configweb

下载config-toolkit,将config-web工程进行打成war包,部署到tomcat7下

注:由于config-web使用了鉴权密码,故需要执行以下python程序

 python -c "import hashlib;print hashlib.sha1('abc').hexdigest();" 

 # a9993e364706816aba3e25717850c26c9cd0d89d 

 echo "set /aaa/bbb a9993e364706816aba3e25717850c26c9cd0d89d" |./zkCli.sh -server localhost:2181 


由于本人不想执行python程序,故修改源代码AuthDao.java,为了快速进入控制界面,此处请原作者原谅

	@Override
	public boolean checkAuth(String nodeName, String password) {
		LOGGER.debug("Check auth: [{}]", nodeName);
		String hash = password; //sha1Digest(password);
		
		boolean isPass = false;
		try {
			// 判断节点是否存在
			Stat stat = getClient().checkExists().forPath(nodeName);
			System.out.println("--------------------------stat:"+stat);
			System.out.println("--------------------------stat:"+ stat != null);
			if (stat != null) {
				byte[] data = getClient().getData().forPath(nodeName);
				System.out.println("--------------------------data:"+ data);
				System.out.println("--------------------------data String:"+ new String(data));
				System.out.println("--------------------------hash:"+hash);
				isPass = hash.equals(new String(data));
				System.out.println("--------------------------isPass:"+ isPass);
			}
		} catch (Exception e) {
			throw Throwables.propagate(e);
		}
		return isPass;
	}


登陆config-web界面

开源配置管理工具config-toolkit 使用心得_第1张图片

 

给根节点创建版本号,上传或者创建配置文件

 

二、配置管理介绍

非热更新配置集成

Spring PlaceholderConfigurer集成

注:此集成仅支持spring3.2以上版本

 


    
    



    
    
        
            config-group1
            config-group2
            config-group3
        
    



    
    
    


集成完毕,使用SPEL读取配置值
此集成方式不支持热更新,不需要进行热更新的配置建议使用此集成方式

热更新配置集成

此方式支持spring3.0以上

 编写config-toolkit.properties

#zookeeper服务地址
zk.address=10.100.15.173:8900 
#zookeeper节点版本 用于灰度发布
zk.version=2.0.0

将configNode交给spring管理,将以下代码copy到spring配置文件


	
		
		
		
	
	
		
	


 将configNode注入到业务bean中

@Component
public class ExampleBeanWithSpel {
	@Autowired
	private ConfigNode configNode;

	public void someMethod() {
		System.out.println(configNode);
		System.out.println(configNode.get("passWord"));
	}
}

 

测试热更新结果

ApplicationContext applicationContext;
			        ExampleBeanWithSpel jdbcTemplate = (ExampleBeanWithSpel)applicationContext.getBean("exampleBeanWithSpel");
			        jdbcTemplate.someMethod();

 


 灰度发布

灰度发布主要靠cofig-toolkit中的版本控制实现,详见  热更新配置集成 章节内容

简单介绍:

 在configWeb管理界面给节点设置多个版本,举例:生产环境版本为 1.0.0   测试环境A版本为2.0.0  测试环境B版本号为3.0.0    

每个版本维护了各自的配置信息, 如果想切换不同环境的配置,只需要将config-toolkit.properties文件中的版本号修改为需要切换的版本号即可

你可能感兴趣的:(配置管理,配置管理,zookeeper,config-tookit)