本文翻译自 – http://www.tigase.org/content/configuration-api 数据库
组件的配置API实际上很是简单,它包含两个方法: api
1
2
|
Map getDefaults(Map params);
voidsetProperties(Map properties);
|
第一个方法从组件当中获取缺省配置,第二个方法为组件设置新的配置项。尽管看起来它们很是简单,但若是想高效得使用,还须要了解更多知识。 数组
在咱们深刻了解所有的细节以前,须要首先知道组件的初始化顺序,组件是如何“得到生命”的,以及配置是什么时候被设置的。组件的加载和启动顺序是这样的: 服务器
配置相关事项当中很重要的一点是:全部的组件都不会读/请求/询问配置信息,配置信息是由configuration manager推送给组件的。在服务器运行的时候,组件的setProperties()方法能够屡次在任意时间被调用。这样设计容许对服务器在运行时进行从新配置,开发者必定须要知道这一点,这样才可以在运行时对从新配置的数据进行正确处理。 网络
两个关于配置的方法具备相同的入口参数Map<String, Object>,因此本质上组件的配置信息所有是键值对。Object对象能够是: socket
若是组件返回的缺省配置项是上面提到的任何一种数据类型,那么setProperties()方法能够确保设置的配置项必定是同一种类型。这对于开发者而言,在代码中只须要有限得进行类型转换。 ide
1
|
Map getDefaults(Map params);
|
这个方法在一般状况下只被调用一次,就是在组件实例被建立以后。这个方法被用来从组件实例获取一些缺省的配置信息,而后服务器能够拿它们与用户的提供的配置信息进行合并,产生缺省或最终的初始化配置信息。咱们建议这个方法返回全部的配置项及缺省值,这样最终用户在对组件进行配置的时候能够看到全部的配置项,方便定位问题。组件的任何初始化代码都不容许出如今该方法里,开发者也不能想固然得认为该方法只被调用一次。在任什么时候候这个方法被调用,都只能返回组件的缺省配置,而不能返回经过setProperties()方法得到的最终配置信息。入口参数Map<String, Object>能够包含一些“暗示”或者“预初始化”参数,它们会影响缺省配置的产生过程。这是由于一些组件的配置信息可能很复杂,并且这些配置信息具备不少的预设值或者会根据具体状况自动进行优化。预设值能够用来产生适合系统运行的缺省配置。若是组件 extend AbstractMessageReceiver,那么这个方法的实现应该始终相似于下面的代码: wordpress
1
2
3
4
5
6
|
@Override
publicMap getDefaults(Map params) {
Map defs =super.getDefaults(params);
defs.put(CONF_ENTRY_KEY, conf_entry_val);
returndefs;
}
|
1
|
voidsetProperties(Map<String, Object> properties);
|
这个方法用来为组件设置配置信息。它能够在服务器的生命周期中在任意时间被屡次调用。输入的配置信息包含了全部经过调用getDefaults()方法所得到的缺省配置项,可是其中一些项的值可能因为用户录入的配置数据被修改。若是组件extend AbstractMessageReceiver,那么实现代码可能为: 函数
1
2
3
4
5
|
@Override
publicvoidsetProperties(Map properties) {
super.setProperties(properties);
intconf_entry_val = (Integer) properties.get(CONF_ENTRY_KEY);
}
|
有一些会提供给全部的组件并被它们所用到的全局配置项。一般这些配置项是每一个组件都会用到的共享资源。 优化
1
2
|
UserRepository user_repo;
user_repo = (UserRepository) properties.get(SHARED_USER_REPO_PROP_KEY);
|
1
2
|
UserRepository user_repo;
user_repo = (UserRepository) properties.get(SHARED_USER_REPO_POOL_PROP_KEY);
|
1
2
|
UserAuthRepository auth_repo;
auth_repo = (UserAuthRepository) properties.get(SHARED_AUTH_REPO_PROP_KEY);
|