Smart-Config SpringBoot动态变更配置 单机版apollo

news/2024/7/17 3:16:44

Smart-Config(单机Apollo)

  • 智能配置:单体应用下的动态配置。
  • 主要用来解决在单体应用没有配置中心时,想要实现动态变更配置,程序自动处理配置变更,给字段赋值的痛点。可以理解为单机版的Apollo。
  • Apollo是携程开源的分布式配置中心,需要单独的部署Apllo配置中心应用,然后在业务应用中指定配置中心的地址,去获取配置中心的配置,实现自定义逻辑。
  • Smart-Config对比Applo的区别是,它是不需要单独去部署应用的,是直接内嵌在我们的业务应用中的。并且侵入性小,上手简单。

优势

  • 权限校验
    • 登录之后才能够查看,修改,发布配置
  • 动态变更配置
    • 业务程序自动获取最新配置,给对应字段赋值
  • 配置描述推断
    • 将配置文件中的注释通过推断显示在webUi中
  • WebUi修改配置
  • 支持非SpringBoot应用
  • 无缝衔接SpringBoot应用
    • 启动类添加@EnableSmartConfig注解使用SmartConfig功能
  • 支持结构化数据(json,集合,对象)
    • Spring使用@Value来支持简单类型
    • SmartConfig使用@JsonValue来支持结构化数据
  • 轻量级无冗余第三方库
  • 内嵌轻量级jetty服务器
  • WebUi支持中英文切换
  • 支持springboot多配置文件
  • 支持spring.config.location以及spring.profiles.active
  • 支持启动参数修改WebUi端口以及配置描述推断

如何使用

依赖引入
<dependency><groupId>io.github.yangfeng20</groupId><artifactId>smart-config-core</artifactId><version>1.0.0</version>
</dependency>
配置文件添加WebUi用户名和密码
# smart配置
smart.username=admin
smart.password=admin
  1. Spring-Boot使用

    主类添加注解@EnableSmartConfig

    @EnableSmartConfig
    public class XxxApplication {ApplicationContext application = SpringApplication.run(XxxApplication.class, args);
    }
    

    使用@Value注解

    public class AppConfig{@Value("${configKey}")private String value;@JsonValue("${list:[1]}")private List<Integer> list;@JsonValue("${config.entity:{}}")private XxxEntity entity; } 
    
  2. 非spring项目使用

    创建LocalFileConfig对象,参数分别为webUi的端口,是否推断配置描述。

    public class App{public static void main(String[]args){SmartConfig smartConfig = new LocalFileConfig(6767, true);List<String> list = new ArrayList<>();list.add("com.maple.smart.config.test");AbsConfigBootstrap bootstrap = new LocalConfigBootstrap(true, 6767,"classpath:application.properties", list);bootstrap.init();}
    }   
    

    静态类的静态字段使用@SmartValue注解

    public class AppConfig{@SmartValue("配置key:默认值")private static String config1;@SmartValue("biz.name:abc")private static String bizName;@JsonValue("${list:[1]}")private static List<Integer> list;@JsonValue("${config.entity:{}}")private static XxxEntity entity; 
    }
    

注意事项

  • Web-Ui默认端口:6767
  • SpringBoot应用配置类被代理后请勿直接访问属性,而是通过getter访问
  • 非Spring应用仅支持静态变量。

项目地址,记得点个star

github: https://github.com/yangfeng20/smart-config
gitee: https://gitee.com/yangfeng20/smart-config

UML类图

在这里插入图片描述

架构图地址:

https://www.processon.com/preview/6574750440125a40fd170439
在这里插入图片描述


https://www.xjx100.cn/news/3366592.html

相关文章

element-ui avatar 组件源码分享

今日简单分享 avatar 组件的源码实现&#xff0c;主要从以下四个方面&#xff1a; 1、avatar 组件页面结构 2、avatar 组件属性 3、avatar 组件事件 4、avatar 组件 slot 一、avatar 组件页面结构 二、avatar 组件属性 2.1 icon 属性&#xff0c;设置头像的图标类型&…

k8s calico由IPIP模式切换为BGP模式

按照官网calico.yaml部署后&#xff0c;默认是IPIP模式 查看route -n &#xff0c; 看到是tunl0口进行转发 怎么切换到BGP模式呢&#xff1f; kubectl edit ippool 将ipipMode由Always修改为Never &#xff0c;修改后保存文件即可。无需做任何操作&#xff0c;自动就切换为BG…

如何调整Node内存限制

Node为什么会出现内存溢出&#xff0c;如何优化&#xff1f;如何调整Node内存限制&#xff1f; 一、内存限制以及溢出原因 Node.js默认的内存限制 Node.js默认的内存限制取决于你的操作系统和Node.js的版本。在大多数情况下&#xff0c;Node.js默认的内存限制应该是1.4GB&#…

el-tree 树形控件

<el-tree :indent"5" // 相邻级节点间的水平缩进&#xff0c;单位为像素:props"defaultProps" ref"tree" :data"leftList":default-expanded-keys"defaultExpandedArr" // 设置默认展开指定节点 存储默认选中节点对应的…

爬虫实战三、PyCharm搭建Scrapy开发调试环境

#一、环境准备 Python开发环境以及Scrapy框架安装&#xff0c;参考&#xff1a;爬虫实战一、Scrapy开发环境&#xff08;Win10Anaconda&#xff09;搭建 PyCharm安装和破解&#xff0c;参考&#xff1a;爬虫实战二、2019年PyCharm安装&#xff08;激活到2100年&#xff09; …

NumPy的ndarray常用属性和索引你学会了吗

1.ndarray的4个重要属性 ndim&#xff1a;返回数组的维度数。例如&#xff0c;一维数组的ndim为1&#xff0c;二维数组的ndim为2 shape&#xff1a;返回数组的形状&#xff0c;即各个维度的大小。例如&#xff0c;对于一个二维数组&#xff0c;shape会返回一个包含行数和列数的…

Python快速入门系列-8(Python数据分析与可视化)

第八章:Python数据分析与可视化 8.1 数据处理与清洗8.1.1 数据加载与查看8.1.2 数据清洗与处理8.1.3 数据转换与整理8.2 数据可视化工具介绍8.2.1 Matplotlib8.2.2 Seaborn8.2.3 Plotly8.3 数据挖掘与机器学习简介8.3.1 Scikit-learn8.3.2 TensorFlow总结在本章中,我们将探讨…

区块链技术的基本概念学习

1.去中心化 去中心化就是你我之间转账&#xff0c;不依赖于银行或支付处理公司。 2.区块链网络 区块链网络是由分布在全球的节点组成&#xff0c;每个节点都有完整的区块链副本。 3.区块 区块就是区块链中的的一个块&#xff0c;这个块里面包含了很多信息&#xff0c;如交…