开源软件名称:jeesuite-config
开源软件地址:https://gitee.com/vakinge/jeesuite-config
开源软件介绍:
介绍为什么要造轮子?之前试用过几个开源的配置中心(disconf、Apollo、diamond以及Spring Cloud Config),各有弊端或者是不满足我们的需求(譬如部署复杂、功能太复杂、不支持全局配置、不支持敏感配置加密,对springboot支持不友好,界面不友好或者无界面等等)。所以从2016年开始有了一个初级版本,经过三年生产环境实际需求不断完善于是就有了这个开源项目。 主要功能清单- 支持多环境、多版本配置管理
- 支持全局配置
- 支持配置文件(properties,yaml,xml)、配置项、json配置支持
- 支持加密配置(server自动加密,client自动解密)
- 支持spring、springboot无缝对接
- 支持环境+项目维度精细化权限(只读/读写)控制
- 支持http和zookeeper方式配置实时同步
- 支持查看配置历史版本、一键回滚、版本对比
- 安全功能支持:可选开启安全ip功能与内网拉取配置限制
- 多业务组/部门数据隔离
- 支持集群部署
特点- 轻量级:无需任何中间件(http方式下发同步)即可运行
- 代码简单:二开成本低
- 安全性高:除了配置加密功能外,还提供多种拉取配置安全策略
服务端部署下载项目git clone https://gitee.com/vakinge/jeesuite-config.git 编译项目mvn clean package -DskipTests=true **最终生成部署包为:**jeesuite-config-server/target/jeesuite-config-server.jar 创建数据库表CREATE DATABASE IF NOT EXISTS `configcenter` DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 执行建表脚本:db.sql 关键配置说明(启动前请自行修改各个环境的配置)#数据库配置db_host=127.0.0.1db_username=rootdb_password=123456#是否允许外网拉取配置(白名单机制生效)api.extranet.enabled=true#敏感配置是否强制加密sensitive.config.force.encrypt=false#开启自动缓存(依赖redis)jeesuite.mybatis.cacheEnabled=truejeesuite.cache.mode=standalonejeesuite.cache.servers=127.0.0.1:6379jeesuite.cache.password=123456jeesuite.cache.database=0#开启共享session(集群部署必须)security.cache.storage-type=redissecurity.cache.servers=127.0.0.1:6379security.cache.password=123456security.cache.database=1 启动拷贝jeesuite-config-server.jar 与 _application.properties在同一目录,springboot会优先加载同一目录下名为_application.properties的配置文件。 nohup java -jar jeesuite-config-server.jar > config-server.out 2>&1 &
admin/admin123 操作指引- 业务组管理:如果需要分多个业务组,各个组需要隔离,请先
添加业务组 ; - 用户管理:添加用户,可以指定业务组,默认密码为手机号后八位;
- profile(环境)管理:可以为每个环境配置配置
同步的zookeeper 以及拉取配置IP白名单 - 应用管理:添加应用,会自动生成对应每个环境的token
- 配置管理:配置分全局配置与应用配置,支持配置文件、key-value配置、json配置
应用集成(客户端)添加依赖<dependency> <groupId>com.jeesuite</groupId> <artifactId>jeesuite-config-client</artifactId> <version>[版本号]</version></dependency> 添加配置在项目增加如下配置: #是否启用配置中心,默认:truejeesuite.configcenter.enabled=false#应用名:对应server端的应用配置jeesuite.configcenter.appName=accountjeesuite.configcenter.base.url=http://configserver:8080#当前环境jeesuite.configcenter.profile=dev#拉取配置版本,默认:latestjeesuite.configcenter.version=latest#是否忽略全局配置,默认:falsejeesuite.configcenter.global-ignore=false#拉取配置认证的tokenjeesuite.configcenter.token=#同步方式,默认:httpjeesuite.configcenter.sync-type=zookeeper# 同步间隔,同步方式为:http时生效jeesuite.configcenter.sync-interval-seconds=30 通过JVM参数外部设置配置方式
-Djeesuite.configcenter.profile=dev docker外部设置配置方式
-e jeesuite.configcenter.profile="dev" springboot项目增加以上配置即可,spring项目还需要做如下修改:
- 去掉原加载配置相关配置
- 新增配置
<bean class="com.jeesuite.confcenter.spring.CCPropertyPlaceholderConfigurer"> <property name="remoteEnabled" value="true" /> <!-- 本地配置文件,无本地配置可不配置 --> <property name="locations"> <list> <value>classpath*:application.properties</value> </list> </property></bean> 一些用法配置优先级- 应用本地配置 > 远程应用配置 > 远程全局配置
- 配置中心配置
jeesuite.configcenter.remote-config-first=true 可以启用远程配置覆盖本地配置
配置实时生效配置变更后会实时下发到应用,可以通过以下方式实时读取最新配置 - 在代码中使用
ResourceUtils 实时读取 - 依赖注入
Environment ,在代码中实时读取 - 实现
ConfigChangeHanlder 接口,自定义刷新逻辑
@Controller @RequestMapping(value = "/sms")public class AuthCommonController implements ConfigChangeHanlder{ @Value("${sms.send.open}") private boolean open = false; @Override public void onConfigChanged(Map<String, Object> changedConfigs) { if(changedConfigs.containsKey("sms.send.open")){ open = Boolean.parseBoolean(changedConfigs.get("sms.send.open").toString()); } }} 配置忽略正常情况应用的配置为全局配置与应用自身配置合并的结果,如果不需要某些全局配置项目如下配置即可 部分页面截图(基于layui 构建)新建配置查看配置用户权限管理 |
请发表评论