共计 2958 个字符,预计需要花费 8 分钟才能阅读完成。
Glory-Admin
GloryAdmin 是一个基于 springboot2.1.9.RELEASE 和 vue-admin-template 搭建的后盾框架;
GloryAdmin 应用基于角色的权限治理。角色树是一个以“系统管理员”为根节点的树,权限树是由多个子权限树组成。“系统管理员”领有所有权限;非系统管理员角色能够查看以后角色和直属上级角色的信息,但只能增删改直属上级的角色的信息(直属上级:A 是 B 的直属上级,则 A 必须为 B 的孩子节点)。
-
Glory-Admin
-
- 技术阐明
- 演示
- 零碎架构
-
我的项目启动
- 数据库装置
- 我的项目启动
-
数据库
- 为什么要数据拆分?什么是分库分表?什么是分布式数据库?
- 数据库的版本控制
- 数据库缓存层 cacheDao
- 分库分表
- 数据分片的拆分形式又分为垂直分片和程度分片
- 罕用分片算法
-
后端
- 权限设计
- 我的项目构造
- Maven 应用 BOM 治理
- 日志记录
- 用户操作日志
- 前端
技术阐明
我的项目 | 技术 |
---|---|
后端我的项目 | springboot |
前端我的项目 | Element UI & Vue.js |
数据库 | MySQL |
缓存 | Redis |
演示
零碎架构
我的项目启动
数据库装置
本我的项目应用 mysql 数据库, 能够应用数据库脚本创立 2 个数据库 multi_module_db multi_module_db_01
我的项目启动
后盾启动,应用 28081 端口
前端启动,应用 9523 端口
关上浏览器拜访 http://localhost:9523 admin a123456
数据库
为什么要数据拆分?什么是分库分表?什么是分布式数据库?
分库分表或者 sharding 的实质是摩尔定律的生效,将数据集中存储至繁多数据节点的解决方案,在性能、可用性和运维老本这三方面曾经难于满足互联网的海量数据场景。
单数据库不能撑持现有的业务,因而呈现了分库分表,应用多个数据库进行数据存储。分库分表简略了解就是一个篮子外面装的货色无限,影响了查找效率和容量,把篮子外面的货色分成 N 份,装到不同的篮子外面。从而突破容量限度,进步查问效率。
而后咱们说一下分布式数据库,国内比拟风行的有腾讯的 TDSQL、阿里的 OceanBase,PolarDB、华为的 GaussDB 等。基本上都是 自主研发,强统一高可用、寰球部署架构、分布式有限程度扩大、高性能,千亿条记录、数百 TB 数据上的跨行跨表事务(为祖国点赞)。分布式数据库暗藏了数据库分库分表的策略,智能的进行数据的分库分表,应用起来就像操作一个数据库一样。
Flyway 数据库的版本控制
数据库缓存层 cacheDao
因为内存操作和磁盘操作基本不是一个量级的,所以在大的我的项目中都须要对 磁盘型的数据库 做 内存型的缓冲层,将磁盘数据缓存到内存中。数据缓存层用于缓存整个数据层的数据,减速站点访问速度。本我的项目应用 AOP 技术、Redis 内存数据库 做数据缓存层。具体请自行查看代码 com/spring/common/aop/CacheDaoAspect.java
分库分表
本我的项目应用 sharding JDBC 解决数据库的分库分表。依据业务场景,自行拆分数据。
通常我的项目都只有一个数据库,国内用的比拟多的是阿里云的 druid 做数据库的连接池。本我的项目应用 mysql,druid,sharding JDBC。数据分库分片的原理,在程序外面保护 多个数据库连接池,每个数据库连接池对应一个数据库。分库分表应用 基于 XA 协定的两阶段事务 解决。配置门路com.spring.common.config.shardingJDBC
数据分片的拆分形式又分为垂直分片和程度分片
垂直拆分:依照业务拆分的形式称为垂直分片,又称为纵向拆分。依照业务将表散布到不同的数据库中,从而将压力扩散至不同的数据库。
程度拆分:不关怀业务逻辑分类,而是通过某张表的某个字段(或某几个字段),依据某种规定将数据扩散至多个库或表中。这里的规定,波及到的算法,咱们称为 分片算法。
罕用分片算法
(以下内容取自 shardingJDBC 文档)
- 准确分片算法
对应 PreciseShardingAlgorithm,用于解决应用繁多键作为分片键的 =
与 IN
进行分片的场景。须要配合 StandardShardingStrategy 应用。
- 范畴分片算法
对应 RangeShardingAlgorithm,用于解决应用繁多键作为分片键的 BETWEEN AND
、>
、<
、>=
、<=
进行分片的场景。须要配合 StandardShardingStrategy 应用。
- 复合分片算法
对应 ComplexKeysShardingAlgorithm,用于解决应用多键作为分片键进行分片的场景,蕴含多个分片键的逻辑较简单,须要利用开发者自行处理其中的复杂度。须要配合 ComplexShardingStrategy 应用。
- Hint 分片算法
对应 HintShardingAlgorithm,用于解决应用 Hint
行分片的场景。须要配合 HintShardingStrategy 应用。
后端
权限设计
- 用户登陆获取 token,存储到本地(adminLogin)
- 用户发送 token 获取用户信息和权限信息,存储到 store 外面。因为 F5 会导致 store 失落,因而前端申请增加了拦截器,如果没有用户信息和权限信息就从新获取用户信息和权限(getAdminInfo)
- 这里返回的是用户所有的权限而不是角色,用户动静生成前端路由
asyncRoutes 为动静生成的权限,如果用户的权限和路由的权限对应,则显示;
我的项目构造
- common:数据操作,数据缓存,事务操作
- admin 只做 controller,用于解决用户申请和后盾业务之间的转发。(why 这样设计呢?)because 有些中间件零碎须要用 RPC 框架做申请转发,because 有些秘密零碎不屑于用 springMVC 而是抉择 vertx 自主开发申请层。
Maven 应用 BOM 治理
应用 Maven 继承 治理我的项目依赖。Modules 外面通过 dependencyManagement 引入依赖并指定版本,子项目继承 Modules, 引入依赖不须要指定版本
日志记录
全局日志解决
用户操作日志
用户操作日志,采纳注解的办法。如果此办法须要记录操作日志,只需在办法名称下面增加 @OperateLog 注解即可。
@OperateLog
@ApiOperation(value = "登出", notes = "登出")
@GetMapping(Route.Admin.adminLogout)
public ResponseDate adminLogout(HttpServletRequest httpServletRequest) {AdminInfoDTO adminInfoDTO = AdminTool.getAdminUser(httpServletRequest);
AdminUser adminUser = adminUserMapper.selectByPrimaryKey(adminInfoDTO.getAdminUk());
adminUser.setNowToken("log-out");
int result = adminUserService.updateAdminToken(adminUser);
return ResponseDate.builder()
.success(result == 1)
.build();}
前端