乐趣区

GloryAdminspringbootspring-bootvueadmintemplate后台

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 应用。

后端

权限设计

  1. 用户登陆获取 token,存储到本地(adminLogin)
  2. 用户发送 token 获取用户信息和权限信息,存储到 store 外面。因为 F5 会导致 store 失落,因而前端申请增加了拦截器,如果没有用户信息和权限信息就从新获取用户信息和权限(getAdminInfo)


  3. 这里返回的是用户所有的权限而不是角色,用户动静生成前端路由

    asyncRoutes 为动静生成的权限,如果用户的权限和路由的权限对应,则显示;

我的项目构造

  1. common:数据操作,数据缓存,事务操作
  2. 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();}

前端

退出移动版