三、客户端配置获取
XXL-CONF 提供多种配置方式,包括 "API、 @XxlConf、XML" 等多种配置方式,介绍如下。
可参考项目 "xxl-conf-sample-spring"(接入XXl-CONF的示例项目,供用户参考学习),代码位置:com.xxl.conf.sample.controller.IndexController.index()
3.1 方式1: API方式
参考 "IndexController" 代码如下:
String paramByApi = XxlConfClient.get("default.key01", null);
- 用法:代码中直接调用API即可,示例代码 ""XxlConfClient.get("key", null)"";
- 优点:
- 配置从配置中心自动加载;
- 存在LocalCache,不用担心性能问题;
- 支持动态推送更新;
- 支持多数据类型;
3.2 方式2: @XxlConf 注解方式
参考 "DemoConf.paramByAnno" 属性配置;示例代码
@XxlConf("default.key02")
public String paramByAnno;
- 用法:对象Field上加注解 ""@XxlConf("key")",支持设置默认值,支持设置是否开启动态刷新;
- 优点:
- 配置从配置中心自动加载;
- 存在LocalCache,不用担心性能问题;
- 支持动态推送更新;
- 支持设置配置默认值;
- 可配置是否开启 "动态推送更新";
|“@XxlConf”注解属性|说明
|——-
|value|配置Key
|defaultValue|配置为空时的默认值
|callback|配置更新时,是否需要同步刷新配置
3.3 方式3: XML占位符方式
参考 "applicationcontext-xxl-conf.xml" 中 "DemoConf.paramByXml" 属性配置;示例代码如下:
<bean id="demoConf" class="com.xxl.conf.sample.demo.DemoConf">
<property name="paramByXml" value="$XxlConf{default.key03}" />
</bean>
- 用法:占位符方式 "$XxlConf{key}";
- 优点:
- 配置从配置中心自动加载;
- 存在LocalCache,不用担心性能问题;
- 支持动态推送更新;
3.4 方式4: "XML + API" 混合方式
参考如下代码:
<bean id="demoConf" class="com.xxl.conf.sample.demo.DemoConf2">
<constructor-arg index="0" value="# {T(com.xxl.conf.core.XxlConfClient).get('key')}" />
<property name="paramByXml" value="# {T(com.xxl.conf.core.XxlConfClient).get('default.key03')}" />
</bean>
- 用法:占位符方式 "# {T(com.xxl.conf.core.XxlConfClient).get('key')}";
- 优点:
- 配置从配置中心自动加载;
- 存在LocalCache,不用担心性能问题;
- 兼容性好:在一些特殊的XML配置加载场景,如 "XML构造器传参"、"自定义spring的schema/xsd" ,上述几种方式不适用,此时可以考虑这种方式,兼容各种场景格式;
- 缺点:
- 不支持动态推送更新;
3.5 其他方式: 配置变更监听
可开发Listener逻辑,监听配置变更事件;可据此实现动态刷新JDBC连接池等高级功能;
参考 "IndexController" 代码如下:
XxlConfClient.addListener("default.key01", new XxlConfListener(){
@Override
public void onChange(String key, String value) throws Exception {
logger.info("配置变更事件通知:{}={}", key, value);
}
});