可配置式数据字典解决方案

可配置式数据字典解决方案

需求和问题

  1. 字典表在数据库里面管理, 字典表可以由页面进行配置配置.
  2. 字典表是需要可配置的, 因此代码里面不能够有任何字典项信息, 那么字典表和代码衔接问题需要解决.
  3. 前后台接收发送数据字典的方式.

设计思路

  1. 要想使用数据库管理字典表首先需要建立字典表, 建立两张表, 一张管理字典类型信息, 一张管理字典项信息, 字典类型表和字典表为一对多关系.
  2. 字典表的使用需要和字段结合起来, 那么就需要字段表以便于配置字段和字典表的信息(如果不使用字段表的话, 那么只能在代码里面直接去使用字典的键去获取字典, 那么就不能够做到字典的配置, 只能够做到字典项配置. 这样的话字典类型势必会对代码造成侵入性, 不方便后续扩展和管理).
  3. 数据字典结合做成可配置式, 需要用到字段表, 字典类型表, 字典项表, 字段表确立字段和字典类型的关系, 这样就可以实现前台页面增删改查管理配置数据字典.
  4. 代码里面肯定会需要用到字典表数据, 而字典表是需要可配置的, 因此代码里面不能够有任何字典项信息, 在此通过枚举来管理数据字典, 这样还可以避免魔法值问题.
  5. 代码里面使用枚举会有很多问题, 在此使用解决方案 -> 巧用枚举让字典表的管理和使用变得简单, 优雅
  6. 代码里面无可避免会使用数据字典, 数据字典页面配置改变后, 项目里面可能会受到影响, 在此字典项表里面加入字段来判断当前数据字典是否在被代码使用, 如果在使用配置时则弹出提示信息.
  7. 数据字典配置后, 代码里面的枚举也需要改变, 如果使用人工编写枚举的话, 很容易造成失误, 而且特别麻烦, 在此采用velocity模型实时一键生成枚举, 实现数据字典和代码的良好衔接.
  8. 数据字典增删改次数少, 但查询次数巨大, 可以更改表引擎为MyISam和采用redis缓存来提高访问速度.
  9. 数据字典项表加入中英文标签, 支持中英文切换.
  10. 后台提供字典表获取统一接口, 前台提供字典表统一查询方法.

遗留问题

  1. 字典表配置更新后, 已经打开的页面来不及更新枚举
    没什么好的方法, 设计好一点, 尽量在很少人使用的时候修改, 实在不行, 修改后后台直接报错, 或前台页面提示或刷新. 甚至修改时直接抛出个维护中的页面.

  2. 字典表配置更新后, 用到该枚举的表字段数据该如何解决.
    手动更改数据库吧

优点

  1. 数据字典可以由前台页面进行配置式管理.
  2. 使用枚举在开发时非常方便. 实现和数据库字典的衔接.
  3. 一键生成枚举实现开发时实时更新.
  4. 加入中英文标签, 实现中英文切换.

数据字典表设计

CREATE TABLE `sys_dict_item` (
    `type` varchar(50) NOT NULL COMMENT '字典类别',
    `value` varchar(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
cms-Cloud后台管理系统 cms-Cloud 基于Spring Boot、Spring Cloud & Alibaba、OAuth2的前后端分离的后台管理系统,内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、代码生成等。在线定时任务配置;支持集群,支持多数据源。核心技术前端技术栈 ES6、vue、vuex、vue-router、vue-cli、axios、element-ui后端技术栈 Spring Boot、Spring Cloud & Alibaba、OAuth2系统需求JDK >= 1.8MySQL >= 5.5Maven >= 3.0主要特性1. 完全响应布局(支持电脑、平板、手机等所有主流设备)2. 强大的一键生成功能(包括控制器、模型、视图、菜单等)3. 支持多数据源,简单配置即可实现切换。4. 支持按钮及数据权限,可自定义部门数据权限。5. 对常用js插件进行二次封装,使js代码变得简洁,更加易维护6. 完善的XSS防范及脚本过滤,彻底杜绝XSS攻击7. Maven多目依赖,模块及插件分目,尽量松耦合,方便模块升级、增减模块。8. 国际化支持,服务端及客户端支持9. 完善的日志记录体系简单注解即可实现技术选型1、系统环境Java EE 8Servlet 3.0Apache Maven 32、主框架Spring Boot 2.2Spring Cloud Hoxton.SR3Spring Framework 5.1Spring Security 5.13、持久层Apache MyBatis 3.4Alibaba Druid 1.14、视图层Vue 2.6Axios 0.18Element UI 2.11内置功能(1) 用户管理:用户是系统操作者,该功能主要完成系统用户配置。(2) 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。(3) 岗位管理:配置系统用户所属担任职务。(4) 菜单管理:配置系统菜单,操作权限,按钮权限标识等。(5) 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。(6) 字典管理:对系统中经常使用的一些较为固定的数据进行维护。(7) 参数管理:对系统动态配置常用参数。(8) 通知公告:系统通知公告信息发布维护。(9) 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。(10) 登录日志:系统登录日志记录查询包含登录异常。(11) 在线用户:当前系统中活跃用户状态监控。(12) 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。(13) 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。(14) 系统接口:根据业务代码自动生成相关的api接口文档。(15) 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。(16) 在线构建器:拖动表单元素生成相应的HTML代码。(17) 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 环境部署准备工作JDK >= 1.8 (推荐1.8版本)Mysql >= 5.5.0 (推荐5.7版本)Redis >= 3.0Maven >= 3.0Node >= 10nacos >= 1.1.0sentinel >= 1.6.0运行系统因为本目是前后端分离的,所以需要前后端都启动好,才能进行访问。后端运行1、导入cms到Eclipse,菜单 File -> Import,然后选择 Maven -> Existing Maven Projects,点击 Next> 按钮,选择工作目录,然后点击 Finish 按钮,即可成功导入Eclipse会自动加载Maven依赖包,初次加载会比较慢(根据自身网络情况而定)2、创建数据库cms-cloud并导入数据脚本cms.sql(必须),quartz.sql(可选)3、创建数据库cms-config并导入数据脚本cms_config.sql(必须)4、配置nacos持久化,修改conf/application.properties文件,增加支持mysql数据源配置。# db mysqlspring.datasource.platform=mysqldb.num=1db.url.0=jdbc:mysql://localhost:3306/cms-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTCdb.user=rootdb.password=password5、打开运行基础模块(启动没有先后顺序)CmsGatewayApplication (网关模块 必须)CmsAuthApplication (认证模块 必须)CmsSystemApplication (系统模块 必须)CmsMonitorApplication (监控中心 可选)CmsGenApplication (代码生成 可选)CmsJobApplication (定时任务 可选)CmsFileApplication (文件服务 可选)前端运行# 进入目目录cd cms-ui# 安装依赖npm install# 强烈建议不要用直接使用 cnpm 安装,会有各种诡异的 bug,可以通过重新指定 registry 来解决 npm 安装速度慢的问题。npm install --registry=https://registry.npm.taobao.org 本地开发 启动目npm run dev打开浏览器,输入:http://localhost:80 (默认账户 admin/admin123)若能正确展示登录页面,并能成功登录,菜单及页面展示正常,则表明环境搭建成功提示前端安装完node后,最好设置下淘宝的镜像源,不建议使用cnpm(可能会出现奇怪的问题)部署系统因为本目是前后端分离的,所以需要前后端都部署好,才能进行访问后端部署bin/package.bat 在目的目录下执行然后会在目下生成 target文件夹包含 war 或jar1、jar部署方使用命令行执行:java –jar xxxx.jar 或者执行脚本:bin/run.bat2、war部署方pom.xml packaging修改为war 放入tomcat服务器webapps提示SpringBoot去除内嵌tomcat前端部署当目开发完毕,只需要运行一行命令就可以打包你的应用# 打包正环境npm run build:prod# 打包预发布环境npm run build:stage构建打包成功之后,会在根目录生成 dist 文件夹,里面就是构建打包好的文件,通常是 ***.js 、***.css、index.html 等静态文件。通常情况下 dist 文件夹的静态文件发布到你的 nginx 或者静态服务器即可,其中的 index.html 是后台服务的入口页面。环境变量所有测试环境或者正环境变量的配置都在 .env.development (opens new window)等 .env.xxxx文件中。它们都会通过 webpack.DefinePlugin 插件注入到全局。常见问题如果使用Mac 需要修改application.yml文件路径profile如果使用Linux 提示表不存在,设置大小写敏感配置在/etc/my.cnf 添加lower_case_table_names=1,重启MYSQL服务如果提示当前权限不足,无法写入文件请检查profile是否可读可写,或者无法访问此目录

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆光影者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值