`
spjich
  • 浏览: 95090 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

分布式配置文件管理工具disconf部署以及运用

阅读更多

disconf之前有搭建过一次但是没有成功,比较纠结它的基于nginx实现动静分离的思想,其实明明可以少一个组件的依赖和配置,或许开发者有其自己的考虑吧。

这次终于搭建完毕并且跑通,下面写几个碰到但是官方文档中没给出的坎。

 

 

 

 

搭建项目

 --就是一个disconf-web

安装依赖软件

  • 安装Mysql(Ver 14.12 Distrib 5.0.45, for unknown-linux-gnu (x86_64) using EditLine wrapper)
  • 安装Tomcat(apache-tomcat-7.0.50)
  • 安装Nginx(nginx/1.5.3)
  • 安装 zookeeeper (zookeeper-3.3.0)
  • 安装 Redis (2.4.5)

准备配置

将你的配置文件放到此地址目录下(以下地址可自行设定):

home/work/dsp/disconf-rd/online-resources

配置文件包括:

- jdbc-mysql.properties (数据库配置)
- redis-config.properties (Redis配置)
- zoo.properties (Zookeeper配置)
- application.properties (应用配置)

注意,记得执行将application-demo.properties复制成application.properties:

cp application-demo.properties application.properties 

设置War包将要被部署的地址(以下地址可自行设定):

/home/work/dsp/disconf-rd/war

构建

ONLINE_CONFIG_PATH=/home/work/dsp/disconf-rd/online-resources
WAR_ROOT_PATH=/home/work/dsp/disconf-rd/war
export ONLINE_CONFIG_PATH
export WAR_ROOT_PATH
cd disconf-web
sh deploy/deploy.sh

这样会在 /home/work/dsp/disconf-rd/war 生成以下结果:

-disconf-web.war  
-html  
-META-INF  
-WEB-INF

上线前的初始化工作

初始化数据库:

可以参考 sql/readme.md 来进行数据库的初始化。

里面默认有6个用户

如果想自己设置初始化的用户名信息,可以参考代码来自己生成用户:

src/main/java/com/baidu/disconf/web/tools/UserCreateTools.java

部署War

修改server.xml文件,在Host结点下设定Context:

<Context path="" docBase="/home/work/dsp/disconf-rd/war"></Context>

并设置端口为 8015

启动Tomcat,即可。

部署 前端

修改 nginx.conf

upstream disconf {
    server 127.0.0.1:8015;
}

server {

    listen   8081;
    server_name localhost;
    access_log /home/work/var/logs/disconf/access.log;
    error_log /home/work/var/logs/disconf/error.log;

    location / {
        root /home/work/dsp/disconf-rd/war/html;
        if ($query_string) {
            expires max;
        }
    }

    location ~ ^/(api|export) {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://disconf;
    }
}

特别指出在打包项目时候请检查python库版本3.*版本会报错,请用2.*打包

第二点,在打出来的war包修改诸如zookeeper的配置时,必须重新打包,单纯修改war目录下的文件是无效的

 

 

 

 

 

 

 

 

 

 

 

 

 

使用

用户名密码 admin/admin

创建app,上传配置


1.添加disconf.properties配置文件

  disconf.user_define_download_dir=./                                 此处意思就是将zookeeper中的配置拉到本地的classpath下,若配置成其他目录,似乎会报错

disconf.enable.remote.conf=true
disconf.conf_server_host=172.171.51.151:8082
disconf.version=1.0.0.0
disconf.app=17wifiServer
disconf.env=local
disconf.ignore=
disconf.conf_server_url_retry_times=1
disconf.conf_server_url_retry_sleep_seconds=1
disconf.user_define_download_dir=./
disconf.enable_local_download_dir_in_class_path=true

 

2.添加disconf.xml,并且指定给spring加载

配置如下

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
    <aop:aspectj-autoproxy proxy-target-class="true"/>
    <!-- 使用disconf必须添加以下配置 -->
    <bean id="disconfMgrBean" class="com.baidu.disconf.client.DisconfMgrBean"
          destroy-method="destroy">
        <property name="scanPackage" value="com.fnic.wifi.server"/>
    </bean>
    <bean id="disconfMgrBean2" class="com.baidu.disconf.client.DisconfMgrBeanSecond"
          init-method="init" destroy-method="destroy">
    </bean>
    <!--################################################################ -->
    <!-- 使用托管方式的disconf配置(无代码侵入, 配置更改会自动reload)-->
    <bean id="configproperties_disconf"
          class="com.baidu.disconf.client.addons.properties.ReloadablePropertiesFactoryBean">
        <property name="locations">
            <list>
                                <value>classpath:jdbc.properties</value>
				<value>classpath:redis.properties</value>
            </list>
        </property>
    </bean>
    <bean id="propertyConfigurer"
          class="com.baidu.disconf.client.addons.properties.ReloadingPropertyPlaceholderConfigurer">
        <property name="ignoreResourceNotFound" value="true"/>
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="propertiesArray">
            <list>
                <ref bean="configproperties_disconf"/>
            </list>
        </property>
    </bean>  
</beans>

 配置上半段是必须配置,下半段是将配置文件托管给spring,并且可以运用${}这样的形式配置在spring的xml中,可以参考jdbc数据源的配置

其中

<value>classpath:jdbc.properties</value>
<value>classpath:redis.properties</value>
要和上面
disconf.user_define_download_dir=./ 对应起来

 

 

 

3.注释掉spring原本的加载配置类

<!--    	<bean id="config"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:conf/jdbc.properties</value>
				<value>classpath:conf/redis.properties</value>
			</list>
		</property>
	</bean> -->  

 4.编写测试bean

@Component
@DisconfFile(filename = "configure.properties")
public class ConfDIs {
	private String resourceUrl;

	@DisconfFileItem(name = "resource_server_url", associateField = "resourceUrl")
	public String getResourceUrl() {
		return resourceUrl;
	}

	public void setResourceUrl(String resourceUrl) {
		this.resourceUrl = resourceUrl;
	}

}

 

ok启动就可以运用disconf了,其性能还有待验证,不过其原理应该是从zk中拉配置到本地内存中,同自己手动加载本地的property文件。

正常的日志如下

2016-04-27 17:57:27 [com.baidu.disconf.client.DisconfMgr]-[INFO] ******************************* DISCONF END FIRST SCAN *******************************
2016-04-27 17:57:28 [org.springframework.beans.GenericTypeAwarePropertyDescriptor]-[WARN] Invalid JavaBean property 'locations' being accessed! Ambiguous write methods found next to actually used [public void com.baidu.disconf.client.addons.properties.ReloadablePropertiesFactoryBean.setLocations(java.util.List)]: [public void org.springframework.core.io.support.PropertiesLoaderSupport.setLocations(org.springframework.core.io.Resource[])]
2016-04-27 17:57:28 [com.baidu.disconf.client.addons.properties.ReloadablePropertiesFactoryBean]-[INFO] Loading properties file from class path resource [jdbc.properties]
2016-04-27 17:57:28 [com.baidu.disconf.client.addons.properties.ReloadablePropertiesFactoryBean]-[INFO] Loading properties file from class path resource [redis.properties]
2016-04-27 17:57:28 [org.springframework.beans.factory.support.DefaultListableBeanFactory]-[INFO] Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@63b7e77: defining beans [wifiAspect,activityDataBuilder,apActiveManageController,adDataBuilder,apAdController,apResourceController,resourceDataBuilder,apUserController,busController,busOnlineController,clickStatistics,confDIs,couponController,apFeedBackController,apFindAroundController,indexController,splashDataBuilder,messageSendController,sendMailController,pluginController,appScoreController,versionController,wifiAuthController,startListener,busServiceImpl,activityServiceImpl,apAdServiceImpl,apFeedBackSeriveImpl,appScoreServiceImpl,apResourceServiceImpl,apUserServiceImpl,busOnlineServiceImpl,couponServiceImpl,DAServiceImpl,findAroundServiceImpl,groupServiceImpl,indexServiceImpl,messageSendServiceImpl,pluginServiceImpl,versionServiceImpl,wifiAuthServiceImpl,httpService,springHolder,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,jedisPoolConfig,jedisConnFactory,stringRedisTemplate,objRedisTemplate,redisObj,redisString,redisTemplate,redisSubscribe,messageDelegateListener,serialization,messageListener,redisContainer,dataSource,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,sqlSessionFactory,org.mybatis.spring.mapper.MapperScannerConfigurer#0,transactionManager,disconfMgrBean,disconfMgrBean2,configproperties_disconf,propertyConfigurer,disconfAspectJ,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor,activityDao,apAdDao,apFeedBackDao,appScoreDao,apResourceDao,apUserDao,busDao,busOnlineDao,couponDao,DADao,findAroundDao,groupDao,indexDao,messageSendDao,pluginDao,versionDao,wifiAuthDao]; root of factory hierarchy
2016-04-27 17:57:28 [com.fnic.wifi.server.aop.WifiAspect]-[INFO] 初始化Controller Aop
2016-04-27 17:57:30 [com.baidu.disconf.client.DisconfMgr]-[INFO] ******************************* DISCONF START SECOND SCAN *******************************
2016-04-27 17:57:30 [com.baidu.disconf.client.DisconfMgr]-[INFO] Conf File Map: 
disconf-file:	redis.properties	
	DisconfCenterFile [
	keyMaps={}
	additionalKeyMaps={redis.maxWait=3000, redis.hostName=172.171.51.154, redis.maxIdle=5, redis.port=6380, redis.maxActive=500}
	cls=null
	remoteServerUrl=/api/config/file?app=17wifiServer&env=local&type=0&key=redis.properties&version=1.0.0.0]
disconf-file:	jdbc.properties	
	DisconfCenterFile [
	keyMaps={}
	additionalKeyMaps={jdbc.url=jdbc:mysql://172.171.48.110:3306/wifimanage?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull, jdbc.minIdle=5, jdbc.username=root, jdbc.maxWait=3000, jdbc.removeAbandoned=true, jdbc.maxActive=15, jdbc.removeAbandonedTimeout=300, jdbc.maxIdle=30, jdbc.logAbandoned=true, jdbc.driver=com.mysql.jdbc.Driver, jdbc.password=root}
	cls=null
	remoteServerUrl=/api/config/file?app=17wifiServer&env=local&type=0&key=jdbc.properties&version=1.0.0.0]
disconf-file:	configure.properties	
	DisconfCenterFile [
	keyMaps={resource_server_url=FileItemValue{value=http://172.171.51.151:8081/Resources2/, field=private java.lang.String com.fnic.wifi.server.controller.ConfDIs.resourceUrl, setMethod=null}}
	additionalKeyMaps={}
	cls=class com.fnic.wifi.server.controller.ConfDIs
	remoteServerUrl=/api/config/file?app=17wifiServer&env=local&type=0&key=configure.properties&version=1.0.0.0]

2016-04-27 17:57:30 [com.baidu.disconf.client.DisconfMgr]-[INFO] Conf Item Map: 

2016-04-27 17:57:30 [com.baidu.disconf.client.DisconfMgr]-[INFO] ******************************* DISCONF END *******************************

 

 

  • 大小: 55 KB
分享到:
评论
1 楼 xiaotao0511 2017-03-18  
博主在吗,按照你的配置方法,我试了一下,在xml里用${}的方式获取配置文件里面的值会报错could not resolve placeholder${xxx},请问是哪里做得不对么?

相关推荐

    (源码)基于SpringBoot和Vue的分布式配置管理系统.zip

    分布式配置管理系统(Disconf)是一个专注于各种分布式系统配置管理的通用组件和通用平台,提供统一的配置管理服务。Disconf旨在简化分布式系统的配置管理,确保配置的统一管理和动态更新。 ## 项目的主要特性和...

    disconf-web简化可部署版

    "Disconf-web" 是一款专为分布式系统配置管理而设计的开源工具,其主要目标是提供一个统一、便捷的配置管理平台。在官方下载的版本中,通常需要借助Nginx进行动静态资源的分离,以优化服务器性能。然而,对于一些...

    Disconf分布式配置管理平台-其他

    Disconf(Distributed Configuration Management Platform)分布式配置管理平台,专注于为各种「分布式系统配置管理」的「通用组件」和「通用平台」提供统一的「配置管理服务」。包括百度、滴滴出行、银联、网易、...

    disconf-web部署指南_V1.3

    Disconf(分布式配置中心)是一款开源的、轻量级的、适用于Java环境的分布式配置管理工具,它能有效地帮助开发者解决在分布式系统中配置管理的难题。这份V1.3版本的指南将详细介绍如何正确、高效地部署和使用disconf...

    Disconf配置war包

    Disconf(分布式配置中心)是百度开源的一款用于解决分布式系统配置管理问题的工具,它可以集中化管理应用的配置,使得在分布式环境下配置的修改和更新变得更加便捷。在本压缩包中,包含了`disconf-web.war`文件,这...

    disconf-demo:disconf分布式配置demo

    `disconf`( Distributed Configuration System)就是这样一个用于Java环境的开源分布式配置管理工具。`disconf-demo`是基于`disconf`的一个示例项目,旨在帮助开发者更好地理解和使用`disconf`。 `disconf`的核心...

    disconf小文档

    disconf,全称是Distributed Configuration Service,是一款开源的分布式配置管理工具,由百度公司推出,旨在解决在分布式环境下配置管理的难题。它提供了一种集中式的、版本化的、动态更新的方式来管理和分发应用的...

    disconf 例子

    Disconf,全称为 Distributed Configuration,是一款由百度开源的分布式配置中心,它能够有效地解决分布式环境中配置管理的难题。本篇文章将深入探讨Disconf的使用,包括如何使用`disconf.properties`文件以及不使用...

    disconf使用

    总结来说,Disconf作为一款强大的分布式配置管理工具,通过集中式管理和实时推送机制,有效地解决了分布式系统中配置管理的难题,提升了开发和运维的效率,是构建大规模分布式系统不可或缺的一部分。在使用过程中,...

    分布式配置中心选型

    在众多开源的分布式配置中心项目中,如淘宝的Diamond和Disconf,Apollo因其功能强大、社区活跃、持续维护以及清晰的文档而受到青睐。它不仅能满足基本的配置管理需求,还提供了丰富的扩展性和灵活性,是微服务架构下...

    分布式架构理解总结

    - **Disconf**: 是一种针对分布式系统的配置中心解决方案,主要用于集中管理配置文件,并支持自动推送更新至客户端。 - **Dubbo**: 作为一款高性能、轻量级的微服务框架,Dubbo 支持服务治理、负载均衡等功能。它...

    分布式逻辑管理平台xxl-glue.zip

    Tips: 可以参考 “配置管理服务,如disconf diamond等” 的概念来帮助我们来认识和理解XXL-GLUE。前者用于维护分布式环境下的 "配置信息", 并推送配置更新; 后者功能更强大, 支持维护 "Java逻辑代码块(基本单元是...

    0806分布式协调服务笔记1

    分布式协调服务在现代大型系统中扮演着至关重要的角色,Zookeeper作为Apache的一个开源项目,是设计用于处理共同的分布式环境中的数据管理问题的工具。它提供了诸如命名服务、配置管理、集群管理、分布式同步和组...

    微服务架构之配置中心.pdf

    配置中心的设计和实现需要考虑到很多因素,包括但不限于配置项的版本控制、加密存储敏感信息、配置项之间的依赖管理、分布式配置的一致性保证、配置的热加载和热部署等。这些都是构建一个可靠、高效配置中心需要解决...

    配置中心对比矩阵.pdf

    综合上述分析,配置中心作为一个集中管理分布式系统配置的工具,必须具备稳定性、安全性和易管理性等特点。它通常需要支持多种环境下的配置管理,能够在多个维度上对配置进行有效的组织和控制。在选择配置中心时,...

    开源配置中心对比

    一个高效、可靠的配置管理中心能够帮助团队更好地管理分布式系统的配置信息,实现配置的动态化、集中化管理,并有效支持不同环境下的灵活配置。本文将对当前市场上热门的几款开源配置中心进行对比分析,旨在为技术...

    java工作中略记载的文本资源

    Disconf是百度开源的分布式配置中心,它帮助开发者将配置统一管理,便于配置的实时更新。`disconf学习.txt`可能会介绍Disconf的基本使用、配置管理流程、客户端SDK集成以及在Zookeeper上的部署和实现。 6. **其他...

    传统企业互联网转型的架构之道.pptx

    - 分布式配置中心:如Disconf,用于管理高安全级别且需要热加载的配置。 - 数据库优化:采用MHA、读写分离、分库分表(如Sharding-JDBC)等策略,避免分布式事务。 - 监控报警:结合Graphite、Zabbix、Dragon和...

    Java思维导图xmind文件+导出图片

    深入分析Zookeeper在disconf配置中心的应用 基于Zookeeper Watcher 核心机制深入源码分析 Zookeeper集群升级、迁移 基于Zookeeper实现分布式服务器动态上下线感知 深入分析Zookeeper Zab协议及选举机制源码解读...

    spring-cloud

    #使用Spring Cloud Config搭建配置中心 笔者的微服务项目中需要使用一个统一的管理分布式系统的...my-sample-config: 简单项目,用于管理配置文件 my-config-server: Spring Cloud Config Server即服务器项目 my-con

Global site tag (gtag.js) - Google Analytics