# unic **Repository Path**: swicky/unic ## Basic Information - **Project Name**: unic - **Description**: Unic 是一款支持任意配置形式的在线万能配置系统,基于 Base-Admin 后台配置,支持远程实时更新,本地文件缓存,配置支持SpringBean 注入的后台配置系统 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/swicky/unic - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 1 - **Created**: 2021-06-19 - **Last Updated**: 2022-10-23 ## Categories & Tags **Categories**: backend **Tags**: 配置后台, 热配置, 万能配置, 在线配置 ## README ### 简介: Unic 取名来自 universal config,本意是想做一个万能的配置系统 解放工作中的众多后台配置需求,解放生产力 奈何作者实力有限,还有很多地方需要改进,如有更好建议,欢迎和作者交流 作者邮箱: miluoshaoyu@163.com 项目地址:https://gitee.com/swicky/unic ### 项目介绍 本项目是基于 Base-Admin (gitee地址:https://gitee.com/huanzi-qch/base-admin) 新增一些功能做的一套通用后台配置,在支持Base-Admin的原有功能基础上,具体新增了以下功能: 1.自定义配置 2.配置菜单/页面自动生成,授权 3.配置领域划分 4.配置版本支持 5.远程服务使用配置 支持Spring Autowire注解 6.远程服务使用配置支持实时更新 7.远程服务使用配置支持本地文件缓存 以实现配置服务宕机也可以使用的高可用性 ### 项目能干什么? 作者在公司里做需求的时候,会碰到很多后台配置的开发需求,如活动配置等等,这些开发需求虽然简单,但是非常耗时,又复杂麻烦, 需要建表,开发增删改查代码,协调前端资源等等,每次的配置需求都比较类似,觉得是可以集成一下做成一个比较通用的项目, 在网上搜索一番,发现没有比较好的项目可以直接拿来使用,于是参考了一些开源框架(如 Apollo )的实现方式之后,开发这一套 Unic项目. 项目的亮点是每次有新增的配置需求,开发可以直接在页面配置响应的配置结构,生成一个配置页面,授权给用户使用,用户配置好数据之后,开发只需要在另一个项目里引用jar包, 便可以很方便的获取配置数据,为了更方便的支持数据的使用,本项目还将配置类注入到Spring容器中,支持 Spring 注解注入的方式进行使用 另外项目汲取了 Apollo 配置的优点,支持配置的实时更新和本地文件缓存,项目不用重编译,不用重启也能有效的快速的获取配置数据. ### 启动项目 在本地down下项目之后,创建数据库,执行DDL和DML,配置文件中配置数据库连接,然后启动就可以了~数据库SQL脚本在这里: >sql文件 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0804/114914_8ce3bed4_543102.png "屏幕截图.png") ### 操作手册 **1.创建配置:** **(1)新建配置** 创建一个配置实例,使用 sa 用户(用户名(sa)密码(123456)写死在登录页面,上线记得删除)登录之后,点击[通用配置管理]->[配置管理]进入配置页面 点击[添加配置]打开弹窗页面,输入配置名称和配置code,注意`配置code`是全局唯一的. **(2) 配置列表页面菜单功能说明** 先看看配置页面长什么样: >配置页面 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0804/112015_053a6b6f_543102.png "屏幕截图.png") 1)领域配置: 领域的概念就是隔离的概念,比如说开发环境和生产环境是一种领域隔离, A服务和 B服务也是一种隔离, 简单的来说就是,在不同的场景/环境等情况下,可以使用不同的配置. 2)预览配置页: 对编辑后的配置进行配置页的预览,让你知道你生成的配置页大概长什么样子 3)编辑: 编辑配置的数据结构 4)生成菜单:当你确认好你的配置的数据结构时,便可以生成一个菜单,用来展示你的配置页 5)菜单授权:新生成的菜单只对你自己生效,如果要将菜单权限授权给其他人,可以使用菜单授权功能._ **(3)领域配置** 就是很简单的配置领域的新增/启用/禁用/删除功能 **(4)编辑** > 编辑页详细 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/141801_42dcf93d_543102.png "屏幕截图.png") **说明** 编辑里分三块: 第一块是配置基本信息,包含配置名称和配置Code, 配置名称是可以修改的,配置Code一旦生成后,不支持修改,而且配置Code要确保全局唯一. 第二块是树状结构,用来编辑配置的数据结构,目前仅支持字符串,日期,复杂对象和数组四种类型,后续会添加其他数据类型,如图片上传等. 第三块是编辑单个配置项的配置方式表单,其中包含配置项名称,配置项 code,配置项类型,输入类型和数据来源配置等, 当输入类型为单选/复选/下拉框时,支持定制数据的来源,目前仅支持固定枚举值,格式如下: 存储值:展示值,存储值:展示值,存储值:展示值 > 数据源配置 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/142425_e89bc0af_543102.png "屏幕截图.png") **(5) 配置预览** > 配置页预览 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/143348_dfaef4b7_543102.png "屏幕截图.png") **说明:** 当配置项是一个数组或者对象时,会有折叠按钮, 单选框/下拉框展示的值就是在配置时,输入的枚举值 **(6) 生成菜单** 将做好的配置生成一个配置菜单,菜单初始化时,只有编辑这个配置的用户可以看到,如果需要给运营或者产品使用,则需要使用授权功能. **(7) 新增配置** 生成菜单后,需要重新刷新一下页面才能看到菜单,菜单位于[运营配置管理]下面,点击展开就可以看到以 [配置名称(配置code)]命名的菜单, 点击即可进入到配置页面,配置页可以选择配置领域,首次进入默认为第一个领域,如页面没有一个绿色小按钮,说明没有配置领域,需要回到之前的通用配置页新建领域 当选择好领域之后,便可以点击[新增配置]来添加一个配置了. 当前页面配置的数据都属于该领域,每次保存配置时,都会自动启用本次编辑的配置,每个版本的配置不可修改,修改便会生成新的版本,启用的版本不可删除,要删除某个版本, 需要先启用其他版本的配置 当发现新建的配置有误时,可以启动上一个版本的配置来保证业务系统的安全. >给运营或者产品使用的配置页 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0804/112542_a206f16d_543102.png "屏幕截图.png") **2.配置的使用:** 配置的使用非常简单: 1.首先在需要使用配置的项目里 引用unic-client jar包,(这里我没有将 jar 包上传到任何仓库,请使用的同学自行打 jar 包到自己的私人仓库.) 在启动类添加注解@EnableUnic 开启配置 2.在你的项目的配置文件添加如下配置: `unic.config.servers=127.0.0.1:80,127.0.0.1:80 #后台配置ip 和 port,集群部署的时候,多台机器以逗号隔开` `unic.config.domain=dev #默认领域值` 3.在任意地方新建配置类(当然这个配置类必须能被启动类扫描到),其字段属性和刚刚后台编辑的配置的数据结构一一对应(这里我后续会在页面上增加生成代码功能), 然后在配置类上面添加注解@UnicConfig 注解有三个属性 value configCode 和 domain 你可以使用configCode 或者 value 来对应配置的配置code(这也是为什么要求配置 code 是全局唯一的) 如果不填写code,将使用类名进行匹配 domain可填可不填,当填写的时候,使用该领域值进行匹配,当不填写的时候,使用配置文件中的默认领域值进行匹配 测试效果: 代码: >启动类 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/165818_d6bc5406_543102.png "屏幕截图.png") >配置类 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/165743_2988d323_543102.png "屏幕截图.png") >测试类 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/165850_844ca4dd_543102.png "屏幕截图.png") 接下里就是测试: >新增一个配置 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/170628_cb95d6c7_543102.png "屏幕截图.png") >配置内容如下: ![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/170657_8067800c_543102.png "屏幕截图.png") 所依赖 jar 包的项目会打印日志: `2021-08-02 17:06:08.260 INFO 6896 --- [ Thread-44] c.sy.unic.core.UnicRemoteConfigService : configCode[Test_Config] had changed its values,new version is[1],show new values :{"sc":{"weight":"123","height":"180"},"sex":"1","name":"Swicky","age":"14"}` 说明本次配置立即生效了 使用 postman 来试试是否真的生效: >postman 演示 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/170842_036e30ea_543102.png "屏幕截图.png") 再次修改配置看看效果: >修改配置 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/171401_1d167100_543102.png "屏幕截图.png") 同样的,项目里也打印了日志: `2021-08-02 17:13:49.327 INFO 6896 --- [ Thread-44] c.sy.unic.core.UnicRemoteConfigService : configCode[Test_Config] had changed its values,new version is[2],show new values :{"sc":{"weight":"123","height":"180"},"sex":"1","name":"Swicky22","age":"100"}` postman 演示: >postman演示 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0802/171509_2792a09d_543102.png "屏幕截图.png") 好了,本项目大概就是如此,如果大家有任何问题,请提issue或者邮箱联系我,我会及时回复的.