自建脚手架之配置中心--LightConf的实现
常规项目开发过程中, 通常会将配置信息位于在项目resource目录下的properties文件文件中, 配置信息通常包括有: jdbc地址配置、redis地址配置、活动开关……等等。因此每次上线或者服务迁移的时候都要手动修改配置,并一台一台的重启服务器,甚是麻烦,且费时费力。
于是便萌生出了使用配置中心的想法,在考察了github上的apoll,xxl-conf等开源项目后,感觉都不适合我司的应用模型,于是决定自研一套符合自己的配置中心,因此LightConf便应运而生,当然LightConf也借鉴了apoll,xxl-conf的部分代码实现。
项目开源地址
- 在经历了一个多月的开发后,项目的第一个稳定版本终于完成,开源地址https://github.com/haifeiWu/lightconf,欢迎各路大神star,拍砖。
- LIGHTCONF使用了netty实现底层通讯,保证配置的实时生效。接入LIGHTCONF事只需要添加maven依赖,简单配置即可马上上手,学习零成本。
一、简介
1.1 概述
LIGHTCONF 是一个配置管理平台,其核心设计目标是“为业务提供统一的配置管理服务”。
1.2 特性
- 1、简单易用: 上手非常简单, 只需要引入maven依赖和一行配置即可;
- 2、在线管理: 提供配置管理中心, 支持在线管理配置信息;
- 3、实时推送: 配置信息更新后,实时推送配置信息, 项目中配置数据会实时更新并生效, 不需要重启线上机器;
- 4、配置备份: 配置数据会在MySQL中会对配置信息做备份, 保证配置数据的安全性;
1.3 背景
why not properties
常规项目开发过程中, 通常会将配置信息位于在项目resource目录下的properties文件文件中, 配置信息通常包括有: jdbc地址配置、redis地址配置、活动开关、阈值配置、黑白名单……等等。使用properties维护配置信息将会导致以下几个问题:
- 1、需要手动修改properties文件;
- 2、需要重新编译打包;
- 3、需要重启线上服务器 (项目集群时,更加令人崩溃) ;
- 4、配置生效不及时: 因为流程复杂, 新的配置生效需要经历比较长的时间才可以生效;
- 5、不同环境上线包不一致: 例如JDBC连接, 不同环境需要差异化配置;
why LIGHTCONF
- 1、不需要 (手动修改properties文件) : 在配置管理中心提供的Web界面中, 定位到指定配置项, 输入新的配置的值, 点击更新按钮即可;
- 2、不需要 (重新编译打包) : 配置更新后, 实时推送新配置信息至项目中, 不需要编译打包;
- 3、不需要 (重启线上服务器) : 配置更新后, 实时推送新配置信息至项目中, 实时生效, 不需要重启线上机器;
- 4、配置生效 “非常及时” : 点击更新按钮, 新的配置信息将会即可推送到项目中, 瞬间生效, 非常及时。比如一些开关类型的配置, 配置变更后, 将会立刻推送至项目中并生效, 相对常规配置修改繁琐的流程, 及时性可谓天壤之别;
- 5、LIGHTCONF使用netty实现底层的长连接通讯,部署足够的轻量级,只需要将项目中的lightconf-admin-web部署即可,不需要额外的安装Redis,zk等。
源码仓库地址
源码仓库地址 | Release Download |
---|---|
https://github.com/haifeiWu/lightconf | Download |
1.5 环境
- Maven3+
- Jdk1.7+
- Tomcat7+
- Mysql5.5+
二、快速入门
2.1 初始化“数据库”
请下载项目源码并解压,获取 “调度数据库初始化SQL脚本” 并执行即可。脚本位置如下:
lightconf/doc/db/light-conf-0.1.1V.sql
2.2 编译源码
解压源码,按照maven格式将源码导入IDE, 使用maven进行编译即可
- lightconf-admin:配置管理中心
- lightconf-core:公共依赖
- lightconf-common:公共依赖
- lightconf-sample: 接入LIGHTCONF的Demo项目
2.3 “配置管理中心” 项目配置
项目:lightconf-admin
作用:管理线上配置信息
配置文件位置:
lightconf/lightconf-admin/lightconf-admin-web/src/main/resources/light-conf.properties
配置项目说明:
# 配置登录lightconf的用户名,密码
light.conf.login.username=admin
light.conf.login.password=123456
# mysql database setting
jdbc.type=mysql
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/light-conf?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=root_pwd
# pool settings
jdbc.pool.init=2
jdbc.pool.minIdle=3
jdbc.pool.maxActive=20
# jdbc.testSql=SELECT 'x'
jdbc.testSql=SELECT 'x' FROM DUAL
# 服务端启动监听端口
netty.server.port=9998
2.4 “接入LIGHTCONF的示例项目” 项目配置
项目:lightconf-sample
作用:接入LIGHTCONF的示例项目,供用户参考学习
A、引入maven依赖
<!-- lightconf-client -->
<dependency>
<groupId>com.lightconf</groupId>
<artifactId>lightconf-core</artifactId>
<version>${project.parent.version}</version>
</dependency>
B、添加 LIGHTCONF 配置文件
可参考配置文件:
lightconf/lightconf-sample/src/main/resources/light-conf.properties
配置项说明:
# 连接light-conf-admin的IP地址
light.conf.host=127.0.0.1
# 连接light-conf-admin的端口号
light.conf.port=9998
## 接入应用的uuid
application.uuid=8705d6c8-bbe0-420c-9853-f780de4cb5ea
C、LIGHTCONF 配置初始化[必须]
可参考配置文件:
lightconf/lightconf-sample/src/main/resources/spring/applicationcontext-light-conf.xml
配置项说明:
<!-- ********************************* 核心配置[必须]:LIGHTCONF 配置 ********************************* -->
<bean id="xxlConf" class="com.lightconf.core.spring.LightConfFactory" init-method="init" destroy-method="destroy" />
<!-- ********************************* 核心配置[必须]:LIGHTCONF netty client监听 ********************************* -->
<bean id="lightConfListener" class="com.lightconf.core.listener.LightConfClientListener"></bean>
自建脚手架之配置中心--LightConf的实现的更多相关文章
- spring boot / cloud (十七) 快速搭建注册中心和配置中心
spring boot / cloud (十七) 快速搭建注册中心和配置中心 本文将使用spring cloud的eureka和config server来搭建. 然后搭建的模式,有很多种,本文主要聊 ...
- SpringCloud(9)---mysql实现配置中心
mysql实现配置中心 本公司配置数据的管理是通过mysql进行配置管理,因为已经搭建好了,所以自己动手重新搭建一遍,熟悉整个流程.有关项目源码后期会补上github地址 微服务要实现集中管理微服务配 ...
- springcloud 入门 8 (config配置中心)
Spring Cloud Config: 配置中心为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件,它就是Spring Cloud Config. 在分布式系统中,由于服务数量巨多, ...
- Spring Cloud(十四)Config 配置中心与客户端的使用与详细
前言 在上一篇 文章 中我们直接用了本应在本文中配置的Config Server,对Config也有了一个基本的认识,即 Spring Cloud Config 是一种用来动态获取Git.SVN.本地 ...
- Vue 框架-10-搭建脚手架 CLI
Vue 框架-10-搭建脚手架 CLI + 批处理快捷启动 脚手架是通过 webpack 搭建的开发环境 使用 ES6 语法 打包和压缩 JS 为一个文件 项目文件在环境中,而不是浏览器 实现页面自动 ...
- Spring Cloud实战之初级入门(五)— 配置中心服务化与配置实时刷新
目录 1.环境介绍 2.配置中心服务化 2.1 改造mirco-service-spring-config 2.2 改造mirco-service-provider.mirco-service-con ...
- SpringCloud实战之初级入门(三)— spring cloud config搭建git配置中心
目录 1.环境介绍 2.配置中心 2.1 创建工程 2.2 修改配置文件 2.3 在github中加入配置文件 2.3 修改启动文件 3. 访问配置中心 1.环境介绍 上一篇文章中,我们介绍了如何利用 ...
- 白话SpringCloud | 第八章:分布式配置中心的服务化及动态刷新
前言 上一章节,简单介绍了分布式配置中心Spring Cloud Config的使用.同时,我们也遗漏了一些问题,比如如何配置实时生效,当服务端地址变更或者集群部署时,如何指定服务端地址?回想,在服务 ...
- Apollo 分布式配置中心
1. 介绍 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置 ...
随机推荐
- POJ 2823 Sliding Window(单调队列入门题)
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 67218 Accepted: 190 ...
- php数组指定字段排序
数据全都存放在名为 data 的数组中.这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc(). <?php$data[] = array('volume' => ...
- 第一章 为什么使用NoSQL
1.1 关系型数据库的价值 1.1.1 获取持久化数据 1.1.2 并发 通过”事务“ 来控制,出错有“回滚”机制. 1.1.3 集成 共享数据库集成,多个应用程序将数据 ...
- Ehcache入门介绍一
EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. 特性有: 1. 快速轻量 Ehcache的线程机制是为大型高并发系统设 ...
- Java和C#中的自定义元数据
Java的annotation和C#的Attribute,可用来为语言增加语义,定义元数据. 转自:http://rednaxelafx.iteye.com/blog/464889 http://bl ...
- 【转载】C# 从服务器下载文件
支持并尊重原创!原文地址:https://www.cnblogs.com/GoCircle/p/6429136.html 一.//TransmitFile实现下载 protected void But ...
- 【bzoj4296】再见Xor
4269: 再见Xor Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 176 Solved: 107[Submit][Status][Discuss ...
- C# ShowDialog时窗体贱传值得方法
用C#开发应用的时候,通常需要多个窗体!有时候为了打开窗体的时候禁止操作父窗体,我们一般采用模态对话框的方法,也算就是用ShowDialog()方法. 假设有两个窗体A和B,A作为主窗体使用ShowD ...
- opennebula 一些问t题讨论
ou_ian - June 8th, 2011 11:13 am非常想请教一下如何设置VM的ip为DHCP? 我们的VM都需要通过eth0 (通过公司的DHCP获得ip)来连接到公司的网络(Inter ...
- ubunt 14.04 Could not find CMAKE_ROOT !!! CMake has most likely not been installed correctly. Modul
CMake Error: Could not find CMAKE_ROOT !!! CMake has most likely not been installed correctly. Modul ...