Hike News

彻底摆脱配置文件 二 (zkconfigutil resolve自动生成)

olve的编写问题,写个eclipse插件看来是比较好的做法,JET也不好弄,所以由于时间限制,短期内没有过多时间去研究eclipse插件(虽对osgi还算熟悉),也在博客中发表过想找合作伙伴开发一个eclipse插件,但也不是很容易实现,所以产生了这个模版,这个实现相对比较容易,但也不能说是万能的,有弊端,但也可以完美满足非特殊情况,请您慢慢往下欣赏!!

resolve template文件在工程template下,网络地址:template resolve

这个模版实际上就是eclipse editor template,是个xml文件,您可以在Window -> Preferences -> Java -> Editor -> Templates,选择import导入该xml即可

到底什么是resolve,为什么需要resolve,请您看这篇博客zkconfigutil详解

这里假设您看过了zkconfigutil的使用或原理实现,我们知道,想对某个class的某个属性实现zookeeper配置,我们需要为每个字段都写一个自己的resolve,这个工作量非常大,并重复性严重,那么有了这个工具后,假如我有个 Demo class

1
2
3
4
5
6
7
8
9
10
11
12
@TypeZkConfigurable(path = "/test/jerry", server = "localhost:2181", useOwnZkServer = false)
public final class Demo {
@FieldZkConfigurable(resolve = DemoF1Resolve.class, dynamicUpdate = true)
public static String F1 = "F1";
@FieldZkConfigurable(resolve = DemoF2Resolve.class, dynamicUpdate = true)
public static String F2 = "F2";
@FieldZkConfigurable(resolve = DemoF3Resolve.class, dynamicUpdate = true)
public static Boolean F3 = false;
}

现在我想写F2字段的DemoF2Resolve.class,您可以在这个demo的空白位置,写个F2(必须与相应属性的名字相同,不同也可以,自己再调整),然后按eclipse的提示快捷键,一般为 ALT+/,在提示列表中会看到resolve,选择这个resolve,eclipse就会根据resolve_template.xml生成DemoF2Resolve.class了,如果您的这个属性是string类型,那么接下来就不需要做任何事情,直接可以使用

代码实例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private static final class DemoF2Resolve extends AbstractResolve {
@Override
public String resolve() {
// TODO Auto-generated method stub
return Demo.F2.toString();
}
@Override
public void dResolve(String src) {
// TODO Auto-generated method stub
Demo.F2 = src;
}
}

添加通用resolve生成模板

cast_resolve_template.xml文件在工程template下,地址:cast_resolve_template

自动生成resolve如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static final class DemoF3Resolve extends AbstractResolve {
@Override
public String resolve() {
// TODO Auto-generated method stub
return Demo.F3.toString();
}
@Override
public void dResolve(String src) {
// TODO Auto-generated method stub
Demo.F3 = Demo.F3.getClass().cast(src);
}
}

时候不早了,写的比较仓促,有些地方可能说的不是很清晰,希望大家有问题或有更好的实现、idea,可以在下方留言或直接联系兄弟


jerry 于2014-03-01 凌晨

彻底摆脱配置文件 一(zkconfigutil详解)

它只是个工具,用于实现分布式集群间配置项的管理,虽小,但很、灰常好用,easy play

项目个性化地址zkconfigutil

代码实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
 * just test
 * @author JERRY
 */
@TypeZkConfigurable(path="/test/jerry", server="localhost:2181", useOwnZkServer=false)
public final class Demo {
@FieldZkConfigurable(resove=DemoF1Resolve.class, dynamicUpdate=true)
public static String F1 = "F1";
@FieldZkConfigurable(resove=DemoF2Resolve.class, dynamicUpdate=true)
public static String F2 = "F2";
@FieldZkConfigurable(resove=DemoF3Resolve.class, dynamicUpdate=true)
public static Boolean F3 = false;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public final class DemoF1Resolve extends AbstractResolve{
@Override
public String resolve() {
// TODO Auto-generated method stub
return Demo.F1;
}
@Override
public void dResolve(String src) {
// TODO Auto-generated method stub
Demo.F1 = src;
}
}

详解

该Demo模拟集群环境,假入Demo用于工程公共配置管理,一般其会有比较多的字段,当前zkconfigutil版本只考虑可配置的字段的值均可以通过string表示,这样我们就可以通过eclipse zookeeer插件方便的实现可视化修改

如您所见,Demo中主要有两类注解,一个用于class,一个用于字段

1
@TypeZkConfigurable(path="/test/jerry", server="localhost:2181", useOwnZkServer=false)

该注解用于class主要有三个参数,path代表该配置在zookeeper上的根目录,一个配置项实际保存在zookeeper上的路径为/path/ClassSimpleName/FieldName,server代表使用的zookeeper地址,标准的zookeeper地址格式,useOwnZkServer表示是否使用自己指定的私有zookeeper,下面您会看到一个totalzookeeper,耐心往下看

1
@FieldZkConfigurable(resove=DemoF1Resolve.class, dynamicUpdate=true)

该注解用于field主要有两个参数,resove主要实现该字段的赋值操作,dynamicUpdate设置该字段是否需要动态更新,true时,zookeeper会对该路径添加dataListener,当zookeeper上值发生变更时,通过reslove实现字段的更新操作

您可能看到了,主要工作在于reslove的开发,但其实其只有两个方法,easy play

1
2
ZkConfigUtil app = new ZkConfigUtil("localhost:2181");
app.register(Demo.class, true);

so easy,两行代码实现Demo的zookeeper化,心动不如行动。game over!!!

description

是的,这个工具其实是我写的,分享给大家,同时也希望大家多提提建议或意见,希望能将其开源,用在N多分布式系统上,所以您可以在[zkconfigutil](https://github.com/jerrysearch/zkconfigutil/) 上fork该project,真心希望您能成为其中一员!!!

jerry 于2014-02-18晚

© 2017 jerry's blog All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero