自建脚手架之配置中心--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(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置 ...
随机推荐
- [PHP] - Laravel - CSRF token禁用方法与排除验证csrf_token的url设置
laravel5.1排除验证csrf_token的url设置 <?php namespace App\Http\Middleware; use Illuminate\Foundation\Htt ...
- Java面向对象-构造方法,this关键字
Java面向对象-构造方法,this关键字 构造方法 概念:构造方法是一个特殊的方法,这个特殊方法用于创建实例时执行初始化操作: 上代码: package com.java1234.chap03.se ...
- 02-20 winform 上传图片并读取图片
建立一个windows窗体应用程序,在form1界面中拖入两个按钮和一个pictureBox,通过输入输出流来上传图片和显示图片.需要添加一下openFileDialog1. 界面如下: 在cs中写上 ...
- Java微信公众平台开发(八)--多媒体消息回复
转自:http://www.cuiyongzhi.com/post/46.html 之前我们在做消息回复的时候我们对回复的消息简单做了分类,前面也有讲述如何回复[普通消息类型消息],这里将讲述多媒体消 ...
- 【开发工具】最强Git使用总结
目录 必读材料 常用小结 Git操作流程 Git常用操作命令 - 代码提交和同步代码 Git常用操作命令 - 代码撤销和撤销同步 Git常用操作命令 - 其它常用命令 Git是分布式代码托管的标杆,这 ...
- 使用ES6的Promis完美解决ajax的回调(优化代码)
相信经常使用ajax的前端小伙伴,都会遇到这样的困境:一个接口的参数会需要使用另一个接口获取. 年轻的前端可能会用同步去解决(笑~),因为我也这么干过,但是极度影响性能和用户体验. 正常的前端会把接口 ...
- 【bzoj2144】跳跳棋
2144: 跳跳棋 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 492 Solved: 244[Submit][Status][Discuss] ...
- SpringAOP02 自定义注解
1 自定义注解 1.1 创建自定义注解 从java5开始就可以利用 @interface 来定义自定义注解 技巧01:注解不能直接干扰程序代码的运行(即:注解的增加和删除操作后,代码都可以正常运行) ...
- c语言学习笔记 break语句
比如 for() { for() { break; } } 那个break语句只是跳出它所在的那个for循环,不会把最外面的for循环都跳出去.
- BOOL运算符号(从C#入门经典第五版中摘录)
只总结自己觉得难的哈: (1) var1=!var2; //(非) (2) var1=var2&var3; //(与) (3)var1=var2|var3; //(或) (4 ...