springboot 轻量级配置中心
项目地址:https://gitee.com/hongmin_shm/lightweight-config-spring-boot-starter
配置中心现有的实现方式有很多,例如SpringCloud生态微服务组件SpringCloud Config、Alibaba开源Nacos框架、携程开源框架Apollo、百度开源配置中心Disconf 等,但对于中小型项目来说,上述方案要么需要整个项目采用spring cloud微服务架构,要么需要考虑配置中心的服务稳定问题(集群部署费时费力),并且有一定的代码侵入不方便未来切换
基于这样的现状,期望配置中心能够在满足基本需求的同时尽量保持"轻量",lightweight-config配置中心带来如下特性:
可以发现,lightweight-config 就是在不使用SpringCloud的前提下,拥有SpringCloud Config的优良特性
基于springboot配置拓展EnvironmentPostProcessor实现容器初始化之前加载远程配置注入到上下文,同时结合一系列Aware回调以及反射实现配置热更新
配置刷新采用定时任务拉取的方式,尚未实现配置更新自动感知功能,可以根据实际需要在配置中指定定时任务的开启和关闭
本项目涉及springboot拓展以及Bean的生命周期等源码知识,用来巩固知识储备也是不错的选择
mvn -U clean install -DskipTest
将jar包安装到本地仓库<dependency>
<groupId>com.youcheng.configcentergroupId>
<artifactId>lightweight-config-spring-boot-starterartifactId>
<version>1.0.0-SNAPSHOTversion>
dependency>
# mysql 存储(mysql、gitee二选一)
lightweight:
config:
provider: com.youcheng.configcenter.provider.DataBaseConfigProvider
data-base:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/config_center
username: root
password: mysql123
configfile:
id: abcdefg
profile: local
# gitee 存储(mysql、gitee二选一)
lightweight:
config:
provider: com.youcheng.configcenter.provider.GiteeConfigProvider
gitee:
url: https://gitee.com/api/v5/repos/hongmin_shm/springboot-config-center/contents/application.properties
token: 5d6d60f188c3bf790c180dbfb56ff305
# 开启定时任务刷新
refresh:
enable: true # 是否开启配置刷新,默认false
delay: 5 # 刷新间隔,单位秒
官网注册gitee账号(如果有账号可以跳过)
建一个专门存储配置文件的git仓库(配置信息敏感请设置仓库为私有),新建一个application.properties 配置文件并push
参考gitee openapi 获取仓库具体路径下的内容 配置一个访问application.properties的http链接,可以点击页面下方的测试按钮查看是否配置成功
例如:https://gitee.com/api/v5/repos/hongmin_shm/springboot-config-center/contents/application.properties
CREATE TABLE `application_config_center_info` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`file_id` varchar(64) NOT NULL COMMENT '文件ID',
`name` varchar(64) NOT NULL COMMENT '文件名',
`profile` varchar(64) NOT NULL COMMENT '环境',
`extension` varchar(16) NOT NULL COMMENT '后缀(properties、yaml、json等)',
`content` text NOT NULL COMMENT '配置内容',
`last_updated_time` datetime(6) NOT NULL COMMENT '最后更新时间',
`last_updated_user` varchar(32) DEFAULT 'system' COMMENT '最后更新操作人',
`version` int NOT NULL COMMENT '版本',
PRIMARY KEY (`id`),
KEY `idx` (`file_id`,`profile`,`version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='应用配置中心信息表';
由于目前配置更新是采用定时任务拉取,所以时间间隔是一个需要在效率和实时方面进行权衡,为了尽量减少系统资源的浪费,对于DB存储的方式,定时任务会先比对version是否有变更以及对比lastUpdatedTime时间戳,尽量在有必要的情况再进行配置的热更新
如有更好的实现方式,例如怎样对配置进行监听,主动推送配置更新事件来通知使用方进行实时更新,欢迎提pr
欢迎pr、issu、讨论
个人联系方式:(wechat)15043284139 (email)[email protected]
项目地址:https://gitee.com/hongmin_shm/lightweight-config-spring-boot-starter