IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springboot 轻量级配置中心 -> 正文阅读

[Java知识库]springboot 轻量级配置中心

工程简介

springboot 轻量级配置中心
项目地址:https://gitee.com/hongmin_shm/lightweight-config-spring-boot-starter

配置中心现有的实现方式有很多,例如SpringCloud生态微服务组件SpringCloud Config、Alibaba开源Nacos框架、携程开源框架Apollo、百度开源配置中心Disconf 等,但对于中小型项目来说,上述方案要么需要整个项目采用spring cloud微服务架构,要么需要考虑配置中心的服务稳定问题(集群部署费时费力),并且有一定的代码侵入不方便未来切换

基于这样的现状,期望配置中心能够在满足基本需求的同时尽量保持"轻量",lightweight-config配置中心带来如下特性:

  1. 考虑到配置中心的稳定性,采用git私有仓库或者DB来存储无论在成本方面以及稳定性(RDS)、安全性方面都有极大的优势
  2. 代码无侵入或者只需要极少的适配代码,继续使用spring @Value注入配置值,同时又不必大量改写现有的项目代码
  3. 动态配置,无须重启项目自动热更新

可以发现,lightweight-config 就是在不使用SpringCloud的前提下,拥有SpringCloud Config的优良特性 🐶

实现原理

基于springboot配置拓展EnvironmentPostProcessor实现容器初始化之前加载远程配置注入到上下文,同时结合一系列Aware回调以及反射实现配置热更新

配置刷新采用定时任务拉取的方式,尚未实现配置更新自动感知功能,可以根据实际需要在配置中指定定时任务的开启和关闭

本项目涉及springboot拓展以及Bean的生命周期等源码知识,用来巩固知识储备也是不错的选择

使用方式

  1. 当前项目并没有发布到中央仓库,所以需要下载本项目到本地,执行mvn -U clean install -DskipTest将jar包安装到本地仓库
  2. 引入starter依赖
<dependency>
    <groupId>com.youcheng.configcenter</groupId>
    <artifactId>lightweight-config-spring-boot-starter</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>
  1. 根据实际采用的存储方式,配置git token或者数据库链接信息,采用DB (Mysql)时,需要先执行 mysql-schema.sql 建表
# 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 配置方法

  1. 官网注册gitee账号(如果有账号可以跳过)

  2. 建一个专门存储配置文件的git仓库(配置信息敏感请设置仓库为私有),新建一个application.properties 配置文件并push

  3. 点击头像->设置
    在这里插入图片描述
    安全设置-> 私人令牌,生成令牌(即access_token)
    在这里插入图片描述

  4. 参考gitee openapi 获取仓库具体路径下的内容 配置一个访问application.properties的http链接,可以点击页面下方的测试按钮查看是否配置成功

例如:https://gitee.com/api/v5/repos/hongmin_shm/springboot-config-center/contents/application.properties
在这里插入图片描述

  1. 将4中生成的链接以及3中生成access_token 配置到引入配置中心的工程中,启动项目即可进行测试
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bp7bulNK-1666667565619)(static/20221024230039.jpg)]

配置文件表结构设计

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

拓展

  1. 自定义远程配置加载方式
    当前支持git以及DB存储配置,也可以拓展为其他存储方式例如本地文件,参考com.youcheng.configcenter.provider.RemoteConfigProvider
  2. 自定义文件格式解析
    当前支持properties、json、yaml(尚不完善)格式的文本格式解析,可以拓展其他格式,参考com.youcheng.configcenter.convertor.ResourceConvertor

欢迎pr、issu、讨论
个人联系方式:(wechat)15043284139 (email)hongmin.shm@aliyun.com
项目地址:https://gitee.com/hongmin_shm/lightweight-config-spring-boot-starter

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:40:46  更:2022-10-31 11:42:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 4:54:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码