先说官方文档:http://disconf.readthedocs.io/zh_CN/latest/index.html

不管是否要根据官方文档来搭建disconf,都应该看一下这一份文档.精炼清晰地介绍了disconf的功能和其他一些包含的东西.看完至少对disconf已经有了大概的了解

  • disconf: https://github.com/knightliao/disconf(管理端)
  • demos: https://github.com/knightliao/disconf-demos-java(客户端)
  • wiki: https://github.com/knightliao/disconf/wiki(wiki)

我搭建的页面:

开始步骤吧:

  • 安装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)

其中安装redis和nginx稍微麻烦一些,参考:

  http://www.cnblogs.com/garfieldcgf/p/6438898.html

  http://www.cnblogs.com/garfieldcgf/p/6438814.html

开始配置:

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

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

我的路径与这个不同,为了避免引起不必要的贴图错误,按照官方的来

拷贝/disconf-web/profile/rd/目录下的文件,拷贝过去后修改即可。

配置文件包括

- jdbc-mysql.properties (数据库配置)
- redis-config.properties (Redis配置,主要用于web登录使用)
- zoo.properties (Zookeeper配置)
- application.properties (应用配置)

cp application-demo.properties application.properties

注意,即使只有一个redis,也应该配置两个redis client,否则将造成内部错误。*

设置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 来进行数据库的初始化。注意顺序执行
0-init_table.sql
1-init_data.sql
201512/20151225.sql
20160701/20160701.sql

里面默认有6个用户(请注意线上环境删除这些用户以避免潜在的安全问题

name pwd
admin admin
testUser1 MhxzKhl9209
testUser2 MhxzKhl167
testUser3 MhxzKhl783
testUser4 MhxzKhl8758
testUser5 MhxzKhl112

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

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 disconf.com;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;
    }
}

这里的配置没有贴全,有些人可能会配错.我贴一份全的(因为对nginx不熟悉,我也遇到了一些小麻烦)

user  root;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;gzip  on;gzip_http_version 1.0;gzip_disable "MSIE [1-6].";gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php image/jpeg image/gif image/png;upstream disconf {server 10.10.10.10:8015;
}server {listen   8081;server_name disconftest.com;access_log /home/work/dsp/access.log;error_log /home/work/dsp/error.log;location / {root /home/docker/garfield/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;
    }
}
}

这里我把server name改成了disconftest.com,跟application.properties里面的配置保持一样即可,

注意:

  1.须保证日志文件的写入有权限哦,日志文件夹提前建好,否则会报错

  2.开头是运行权限,这边因为没有用root运行会导致页面持续被拦截,报403,有遇到的人注意下

服务管理端的部署到这里就结束了,启动zookeeper,redis,tomcat,mysql和nginx就可以访问页面了,输入

http://10.10.10.10:8081/

看到如下页面就成功了:

输入admin/admin发现里面已经有一些配置,但是没有机器在运行,接下来进行客户端应用

其实git下载下来的demo直接运行就可以看到配置文件的下载了,当然要配置访问的服务端地址.这方面就不赘述了,记录一下我的两个实践

1.将xml下载到指定路径--将mybatis.xml文件从平台上下载,统一管理

先写一个简单的mybatis应用程序(打印出数据库所有用户表名称),主要类:

@Service
@Transactional
public class UserService {private static Logger  logger  = LogManager.getLogger(UserService.class);@Autowiredprivate UserDao userMapper;public List<User> searchAll(){List<User> list = userMapper.findAll();for (User user : list) {System.out.println(user.getUsername());}return list;}
}

主函数:

/*** @author garfield* @version 2017-2-17*/
public class DisconfDemoMain {private static String[] fn = null;// 初始化spring文档private static void contextInitialized() {fn = new String[] {"applicationContext.xml"};}/*** @param args** @throws Exception*/public static void main(String[] args) throws Exception {contextInitialized();ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(fn);UserService userService = ctx.getBean("userService", UserService.class);while (true){userService.searchAll();Thread.sleep(10000);}}
}

配置类:

import com.baidu.disconf.client.common.annotations.DisconfFile;
import com.baidu.disconf.client.common.annotations.DisconfUpdateService;
import com.baidu.disconf.client.common.update.IDisconfUpdate;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;/*** Created by garfield on 2017/2/23.*/
@Service
@Scope("singleton")
@DisconfFile(filename = "UserMapper.xml",targetDirPath = "cloud/simple/service/dao")
@DisconfUpdateService(classes = {XMLConfig.class})
public class XMLConfig implements IDisconfUpdate {public void reload() throws Exception {System.out.println("=====================================================================");}
}

targetDirPath是配置下载到指定的路径中,这种情况下,profile里面的disconf.enable_local_download_dir_in_class_path配置项须置为true,运行后效果如下:

输出:

16:40:47.484 [main] DEBUG o.m.s.t.SpringManagedTransaction - JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@1f6f7075]]] will not be managed by Spring
16:40:47.489 [main] DEBUG c.simple.service.dao.UserDao.findAll - ==>  Preparing: select * from user
16:40:47.513 [main] DEBUG c.simple.service.dao.UserDao.findAll - ==> Parameters:
16:40:47.532 [main] DEBUG c.simple.service.dao.UserDao.findAll - <==      Total: 2
16:40:47.533 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7eadb544]
username = 1
username = 2

2.第二个实例,将log4j2.xml日志配置文件统一管理

这个例子其实关键在于手动加载日志,本身实际上也是一个下载xml文件的过程

配置类:

import com.baidu.disconf.client.common.annotations.DisconfFile;
import com.baidu.disconf.client.common.annotations.DisconfUpdateService;
import com.baidu.disconf.client.common.update.IDisconfUpdate;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;/*** Created by garfield on 2017/2/23.*/
@Service
@Scope("singleton")
@DisconfFile(filename = "log4j2.xml")
@DisconfUpdateService(classes = {XMLConfig.class})
public class LogConfig implements IDisconfUpdate {public void reload() throws Exception {System.out.println("=====================================================================");}
}

下载下来之后log4j.xml文件的位置:(与工程同级)

在主函数做一个加载动作:

import cloud.simple.service.domain.UserService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.config.Configurator;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.apache.logging.log4j.core.config.ConfigurationSource;
import java.io.File;
import java.io.FileInputStream;
import java.net.URL;/*** @author garfield* @version 2017-2-17*/
public class DisconfDemoMain {private static String[] fn = null;private static Logger logger;// 初始化spring文档private static void contextInitialized() {fn = new String[] {"applicationContext.xml"};}/*** @param args** @throws Exception*/public static void main(String[] args) throws Exception {contextInitialized();ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(fn);
        //此处加载日志文件URL url=DisconfDemoMain.class.getResource("/log4j2.xml");System.out.println(url.getPath());ConfigurationSource  source = new ConfigurationSource(new FileInputStream(new File(url.getPath())),url);Configurator.initialize(null, source);logger  = LogManager.getLogger(DisconfDemoMain.class);UserService userService = ctx.getBean("userService", UserService.class);logger.info("begin to search...");while (true){userService.searchAll();Thread.sleep(10000);}}
}

运行后查看一下日志文件是否生效:

2017-02-24 16:46:01,467 INFO  main (cloud.simple.service.DisconfDemoMain) - begin to search...
2017-02-24 16:46:01,820 INFO  main (cloud.simple.service.domain.UserService) - =========================
2017-02-24 16:46:01,820 INFO  main (cloud.simple.service.domain.UserService) - username = 1
2017-02-24 16:46:01,820 INFO  main (cloud.simple.service.domain.UserService) - =========================
2017-02-24 16:46:01,820 INFO  main (cloud.simple.service.domain.UserService) - username = 2

demo中还有一些其他的例子,不过看文档大概也能明白,就不说明了.

done!

转载于:https://www.cnblogs.com/garfieldcgf/p/6439221.html

分布式配置管理--百度disconf搭建过程和详细使用相关推荐

  1. 百度分布式配置管理平台-Disconf

    转载自 [推荐]百度分布式配置管理平台-Disconf Disconf介绍 全称:Distributed Configuration Management Platform,即分布式配置管理平台. D ...

  2. jenkins详解和分布式配置管理平台 Disconf

    1. jenkins详解:https://blog.csdn.net/qq_26848099/article/details/78901240 一.相关概念 1.1 Jenkins概念: Jenkin ...

  3. 分布式配置管理平台 Disconf

    Distributed Configuration Management Platform(分布式配置管理平台) 专注于各种 分布式系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务. 包括 ...

  4. 分布式配置管理平台Disconf

    disconf是一套完整的基于zookeeper的分布式配置统一解决方案 功能特点: 支持配置的分布式化管理,配置发布统一化 极简的使用方式(注解式编程 或 XML代码无代码侵入模式) 需要Sprin ...

  5. 记录一次redis数据库搭建过程并详细说明配置

    redis.conf配置文件详解 Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 当Redis以守护进程方式运行时,Redis默认会把p ...

  6. Distributed Configuration Management Platform(分布式配置管理平台)

    2019独角兽企业重金招聘Python工程师标准>>> 专注于各种 分布式系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务. 主要目标: 部署极其简单:同一个上线包,无须 ...

  7. Java Web学习总结(23)——Distributed Configuration Management Platform(分布式配置管理平台)

    专注于各种 分布式系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务. 主要目标: 部署极其简单:同一个上线包,无须改动配置,即可在 多个环境中(RD/QA/PRODUCTION) 上线 部 ...

  8. Java Web学习总结(23)——Distributed Configuration Management Platform(分布式配置管理平台)...

    专注于各种 分布式系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务. 主要目标: 部署极其简单:同一个上线包,无须改动配置,即可在 多个环境中(RD/QA/PRODUCTION) 上线 部 ...

  9. Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题...

    现互联网公司后端架构常用到Spring+SpringMVC+MyBatis,通过Maven来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...

最新文章

  1. 重要的事情说三遍!网站如何改版才能最大限度降低影响率?
  2. The server time zone value is unrecognized or repr
  3. 一个比较完整的Inno Setup 安装脚本
  4. Java nio 学习笔记 相关知识
  5. vs2015 行数统计
  6. ft服务器设置传输协议,ft服务器设置成主动模式
  7. 有效单元测试之可读性
  8. php实现ppt样式效果源码,jQuery移动端和桌面设备的轻量级幻灯片特效源码
  9. SuperMap.IS.AjaxScript之常用功能实现研究及使用
  10. (转)iOS 常用宏定义
  11. final—前后端分离的网站
  12. jdbc 生成建表语句_记录一次TDH的inceptor导出建表语句和数据
  13. 《Java语言程序设计》(基础篇原书第10版)第五章复习题答案
  14. Mac OS系统下kernel_task占用大量CPU资源导致系统卡顿
  15. 银联刷卡POS机冲正
  16. 一条sql执行很慢,可能是因为什么? 怎么优化?
  17. java-net-php-python-java宿舍管理系统计算机毕业设计程序
  18. Win10+Cuda10.2的Pytorch安装
  19. -Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable a
  20. 修正逆解文章——六轴UR机械臂正逆运动学求解_MATLAB代码(标准DH参数表)

热门文章

  1. python用matplotlib画人口图_Python+Matplotlib画contour图
  2. Flutter开发之GridView组件(20)
  3. Windows服务器SYSTEM权限Webshell无法添加3389账户情况突破总结
  4. sudo brew install mongodb报错
  5. phpstudy集成环境安装redis扩展
  6. 爬虫:获取页面 -- request库的使用
  7. nginx:在centos中自启动
  8. FineUI经典项目展示(1)生产在线管理系统
  9. PAT 10-2 删除字符串中的子串
  10. Android ContentResolver