统一配置管理-百度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注解类所在包路径

注解方式使用:

配置文件注解使用

具体步骤是:

  1. 为这个类定义 @DisconfFile 注解,指定文件名为 code.properties 。
  2. 定义域codeError,并使用Eclipse为其自动生成 get&set 方法。
  3. 为该域的get方法上添加注解 @DisconfFileItem 。添加标记 name, 表示配置文件中的KEY名,这是必填的。标记associateField是可选的,它表示此get方法相关连的域的名字,如果此标记未填,则系统会自动 分析get方法,猜测其相对应于域名。强烈建议添加associateField标记,这样就可以避免Eclipse生成的Get/Set方法不符合 Java规范的问题。
  4. 标记它为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

https://github.com/knightliao/disconf/wiki

posted @ 2016-11-20 13:53  拿铁先森  阅读(7676)  评论(0编辑  收藏  举报