Glory-AdminGloryAdmin是一个基于springboot2.1.9.RELEASE和vue-admin-template的后台框架;GloryAdmin采用基于角色的权限管理。角色树是以“系统管理员”为根节点的树,权限树由多个子权限树组成。“系统管理员”拥有所有权限;非系统管理员角色可以查看当前角色和直属下属角色的信息,但只能增加、删除、修改直属下属角色的信息(直属:A直属B,那么A一定是孩子B)的节点。Glory-Admin技术笔记演示系统架构项目启动数据库安装项目启动数据库为什么要做数据拆分?什么是分库分表?什么是分布式数据库?数据库版本控制数据库缓存层cacheDao分库分表数据分片方式分为垂直分片和水平分片常用分片算法后端权限设计项目结构Maven使用BOM管理日志记录用户操作日志前端??技术说明项目技术后端项目springboot前端项目ElementUI&Vue.js数据库MySQLCacheRedisDemo演示地址系统架构项目启动数据库安装本项目使用mysql数据库,可以使用数据库脚本创建两个数据库multi_module_db前端启动28081端口,浏览器打开端口9523访问http://localhost:9523admina123456数据库为什么要进行数据拆分?什么是分库分表?什么是分布式数据库?分库分表或分片的本质是摩尔定律的失效。将数据集中存储在单个数据节点的方案在性能、可用??性和运维成本上已经难以满足互联网的海量数据场景。单一数据库无法支撑现有业务,于是出现分库分表,使用多个数据库进行数据存储。分库分表简单理解就是一个篮子的内容是有限的,影响查找效率和容量。把篮子里的东西分成N份,放到不同的篮子里。从而打破容量限制,提高查询效率。然后再来说说分布式数据库。国内比较流行的有腾讯的TDSQL、阿里的OceanBase、PolarDB、华为的GaussDB。基本自主研发,强一致性高可用,全局部署架构,分布式无限水平扩展,高性能,千亿记录,百TB数据(像祖国一样)的跨行跨表事务).分布式数据库隐藏了数据库分库分表策略,智能进行数据分库分表,就像操作数据库一样。Flyway数据库的版本控制数据库缓存层cacheDao与内存操作和磁盘操作不是一个数量级的,所以在大型项目中需要为磁盘类型的数据库做一个内存类型的缓冲层来缓存磁盘数据在记忆中。数据缓存层用于缓存整个数据层的数据,以加快站点访问速度。本项目采用AOP技术,Redis内存数据库作为数据缓存层。详情请自行查看代码com/spring/common/aop/CacheDaoAspect.java分库分表本项目采用shardingJDBC处理数据库分库分表。根据业务场景自行拆分数据。通常一个项目只有一个数据库,国内多使用阿里云的druid作为数据库连接池。本项目使用mysql、druid、shardingJDBC。数据分片分片的原理是在程序中维护多个数据库连接池,每个数据库连接池对应一个数据库。分库分表采用基于XA协议的两阶段事务处理。配置路径com.spring.common.config.shardingJDBC数据分片分为垂直分片和水平分片。垂直分片:按照业务拆分方式,称为垂直分片,也称垂直分片。.表根据业务分布到不同的数据库中,从而将压力分散到不同的数据库中。水平拆分:不关心业务逻辑分类,而是利用某个表的某个字段(或几个字段),按照一定的规则将数据分散到多个库或表中。这里的规则和涉及的算法称为分片算法。常用的sharding算法(以下内容摘自shardingJDBC文档)对应的是PreciseShardingAlgorithm,用于处理以单个key为shardingkey的=和IN进行sharding的场景。它需要与StandardShardingStrategy一起使用。rangesharding算法对应RangeShardingAlgorithm,用于处理BETWEENAND,>,<,>=,<=以单个key为shardingkey的sharding场景。它需要与StandardShardingStrategy一起使用。Compositesharding算法对应ComplexKeysShardingAlgorithm,用于处理多个key作为shardingkey进行分片的场景。包含多个shardingkey的逻辑比较复杂,需要应用开发者自行处理。它需要与ComplexShardingStrategy一起使用。Hintsharding算法对应HintShardingAlgorithm,用于处理使用Hintrowsharding的场景。它需要与HintShardingStrategy一起使用。后端权限设计用户登录获取token,token存储在本地(adminLogin)。用户发送token获取用户信息和权限信息,存储在store中。由于F5会导致store丢失,所以在前端请求中添加拦截器。如果没有用户信息和权限信息,这里返回用户信息和权限(getAdminInfo)。这里返回用户的所有权限,用户动态生成前端路由asyncRoutes为动态生成的权限,如果用户的权限对应路由权限,则显示;项目结构常见:数据操作、数据缓存、事务操作admin只是一个控制器,用于处理用户请求和后台服务之间的转发。(为什么要这样设计?)因为有些中间件系统需要使用RPC框架进行请求转发,因为有些机密系统不屑于使用springMVC而是选择vertx独立开发请求层。Maven使用BOM管理,使用Maven继承来管理项目依赖关系。Module引入依赖并通过dependencyManagement指定版本,子项目继承Modules,引入依赖不需要指定版本日志,记录全局日志,处理用户操作日志,使用注解。如果该方法需要记录操作日志,只需在方法名上加上@OperateLog注解即可。@OperateLog@ApiOperation(value="登出",notes="登出")@GetMapping(Route.Admin.adminLogout)publicResponseDateadminLogout(HttpServletRequesthttpServletRequest){AdminInfoDTOadminInfoDTO=AdminTool.getAdminUser(httpServletRequest);AdminUseradminUser=adminUserMapper.selectByPrimaryKey(adminInfoDTO.getAdminUk());adminUser.setNowToken("注销");intresult=adminUserService.updateAdminToken(adminUser);returnResponseDate.builder().success(result==1).build();}前端
