统一配置管理-百度disconf
准备工作:
1.在客户端应用的pom文件中新增disconf依赖
<dependency>
<groupId>com.baidu.disconf</groupId>
<artifactId>disconf-client</artifactId>
<version>2.6.36</version>
</dependency>
2. 在客户端应用的classpath下新增disconf.properties文件
注:所有disconf.properties配置文件中的参数,都可以通过-Dxxx=xxx的启动参数方式进行覆盖
Disconf启动需要此文件,文件示例是:
# 是否使用远程配置文件
# true(默认)会从远程获取配置 false则直接获取本地配置
enable.remote.conf=true
#
# 配置服务器的 HOST,用逗号分隔 127.0.0.1:8000,127.0.0.1:8000
#
conf_server_host=127.0.0.1:8080
# 版本, 请采用 X_X_X_X 格式
version=1_0_0_0
# APP 请采用 产品线_服务名 格式
app=disconf_demo
# 环境
env=rd
# debug
debug=true
# 忽略哪些分布式配置,用逗号分隔
ignore=
# 获取远程配置 重试次数,默认是3次
conf_server_url_retry_times=1
# 获取远程配置 重试时休眠时间,默认是5秒
conf_server_url_retry_sleep_seconds=1
配置相关说明可参考:https://github.com/knightliao/disconf/wiki/%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E
3. 在applicationContext.xml
添加Disconf启动支持
scanPackage是扫描标注了disconf注解类所在包路径
注解方式使用:
配置文件注解使用
具体步骤是:
- 为这个类定义 @DisconfFile 注解,指定文件名为 code.properties 。
- 定义域codeError,并使用Eclipse为其自动生成 get&set 方法。
- 为该域的get方法上添加注解 @DisconfFileItem 。添加标记 name, 表示配置文件中的KEY名,这是必填的。标记associateField是可选的,它表示此get方法相关连的域的名字,如果此标记未填,则系统会自动 分析get方法,猜测其相对应于域名。强烈建议添加associateField标记,这样就可以避免Eclipse生成的Get/Set方法不符合 Java规范的问题。
- 标记它为Spring托管的类 (使用@Service),且 "scope" 都必须是singleton的。
注意:
Eclipse自动生成的get方法,可能与Java的规范不同。这会导致很多问题。因此,建议加上 associateField 标记。
在disconf-web上code.properties新增该配置文件(版本,环境,app与disconf.properties配置文件中相同)
配置项注解使用:
配置更新回调:
实现IDisconfUpdate接口,并且该类是由spring管理
注解@DisconfUpdateService, confFileKeys为监控配置文件更新,itemKeys为监控配置项更新
基于XML的配置使用
配置变更自动注入配置项到bean实例中(存在读一致性问题,建议用DisconfiFile注解方式使用):
配置文件会被自动下载至本地,但是不会reload到系统里(使用静态配置如数据库链接配置等,重启后方可生效)
更多使用见disconf的相关wiki