Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Future]希望能增加非注解的回调类来处理更新配置 #67

Closed
myoss opened this issue Mar 15, 2016 · 10 comments
Closed

[Future]希望能增加非注解的回调类来处理更新配置 #67

myoss opened this issue Mar 15, 2016 · 10 comments

Comments

@myoss
Copy link

myoss commented Mar 15, 2016

wiki和demo的代码我粗略看下来,client端要做到能实时获取web端更新的配置文件,只能使用注解方式,能否实现类似taobao diamond这种回调类,自己来处理获取到的配置信息,并且不是注解的,有些场景下,我的配置文件非常个性化,而不是简单的properties属性文件的key=value形式,我希望自己来处理

new DefaultDiamondManager(groupID, dataID, new ManagerListenerAdapter() {
    @Override
    public void receiveConfigInfo(String configInfo) {
        System.out.println("我将在这里处理获取到的更新配置信息:" + configInfo);
    }
}
@54ebb
Copy link

54ebb commented Mar 16, 2016

我也遇到相同的场景。一种方法,
(1)采用注解,只指定@DisconfFile,没有@DisconfFileItem
(2)实现IDisconfUpdate接口,完成回调

@myoss
Copy link
Author

myoss commented Mar 16, 2016

  1. 这样的话,还是离不开注解,我线上有很太多这种非properties的配置文件。
  2. 我期望能有一种简单的回调类,将更新后的配置文件内容让我自己在代码里处理。期望client端少做一点事情,这也算是一种解耦吧,希望望作者能考虑下。
  3. 因为注解会有个很麻烦的事情,就是一个配置文件要对应一个java类,如果我在回调类处理的场景是同一类的,我可以定义一个,然后将配置文件的名字和版本信息,放在xml文件中配置(万一有天脑残需要变动了,需要改代码重新编译,xml的话就简单很多了),通过spring生成不同的bean,这样方便很多。

@knightliao
Copy link
Owner

@myoss 有道理 ,下个版本加你这个功能

@myoss
Copy link
Author

myoss commented Mar 16, 2016

期待这一功能,辛苦作者了 @knightliao

@kunchong21
Copy link

我也需要非注解功能。。。。

knightliao added a commit that referenced this issue Mar 23, 2016
希望能增加非注解的回调类来处理更新配置
knightliao added a commit to knightliao/disconf-demos-java that referenced this issue Mar 23, 2016
希望能增加非注解的回调类来处理更新配置
@knightliao
Copy link
Owner

2.6.32版本中会增加 已提交至master/dev, 目前snapshot中。

@knightliao
Copy link
Owner

已经发布

@myoss
Copy link
Author

myoss commented Mar 27, 2016

我已经获取更新,看了文档和代码,试用下来,我是有些疑问的。

disconf-standalone-demo项目中的UpdatePipelineCallbackwindows系统下Paths.get(path)会解析出错,归根结底是因为ClassLoaderUtil中设置的classPathwindows系统是有问题的,我在linux系统测试是ok的,希望能照顾下我们这些windows用户

qq 20160327203748

建议ClassLoaderUtil改用以下方式获取路径,或者其它方式

 // 获取类加载的根路径 D:\workspaces\IntelliJ\study-java\target\classes
File f = new File(this.getClass().getResource("/").getPath());
System.out.println("获取类加载的根路径: " + f);

看了源码IDisconfUpdatePipeline接口会在更新所有配置文件的时候都会被调用,并且项目中只能有一个实现类(假设:UpdatePipelineCallback),而且如果项目中有注解的动态加载配置文件,也会触发这个接口,这样多次触发就要小心点了。其实也就意味着项目在使用的时候,如果有一种(比如:txtjson,随便举例)以上的配置文件,只能在UpdatePipelineCallback中用if/else这种代码来解析,接下来我就不用多说了吧。。。。

如果可以,我希望这个回调接口,就像注解接口一样,它是跟xml配置文件绑定在一起的,最大区别就是它的文件名是在xml配置文件中声明的,然后这个回调接口最好不是给路径让用户自己去读取(可能会涉及一些问题),而是直接给最新的配置文件的内容,用户应该是不用去关心disconf-client保存在本地的实现,因为很有可能某一天保存的策略就变化了,用户在拿到最新的配置文件内容之后,去做自己的事情

@knightliao
Copy link
Owner

  1. Path问题回头我在windows下看看。
  2. 你不想使用if else, 那就使用 注解式,那样可以更加精确。为何两种方式要同时使用?
  3. “如果可以,我希望这个回调接口,就像注解接口一样,它是跟xml配置文件绑定在一起的,最大区别就是它的文件名是在xml配置文件中声明的,” 那你为何不先用注解式?注解式和XML式本来就是两种style. 当然,后续会考虑XML式实现。
  4. “因为注解会有个很麻烦的事情,就是一个配置文件要对应一个java类,如果我在回调类处理的场景是同一类的,我可以定义一个,然后将配置文件的名字和版本信息,放在xml文件中配置(万一有天脑残需要变动了,需要改代码重新编译,xml的话就简单很多了),通过spring生成不同的bean,这样方便很多。” 我理解通过新发布的这个功能,你写一个通用的XML处理程序,不需要很多if else 就可以实现free的处理了。
  5. 公布路径和公布文件内容 这是两种处理方式,我会考虑直接公布文件内容的方式

@knightliao
Copy link
Owner

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants