# easy_frame **Repository Path**: zengzefeng/easy_frame ## Basic Information - **Project Name**: easy_frame - **Description**: No description available - **Primary Language**: Java - **License**: MulanPSL-1.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2022-01-21 - **Last Updated**: 2023-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目介绍 > easy_frame是一款基于spring_cloud_alibaba搭建的业务平台脚手架 > > quickStart: [quickStart](./file/quickStart.md) > > 运维部署:[详情](./file/运维部署.md) ## 架构说明 - 框架:spring-cloud, spring-boot, mybatis - 数据库: mysql, redis, mongodb ...(后续可能会用到hBase,TiDB等) - 架构组件:gateway, open-feign, sentinel, nacos - 功能组件: sharding-jdbc, rabbit-mq, seata, actuator, xxl-job, prometheus, grafana等 > 架构图:https://www.processon.com/view/link/5f9bcb845653bb373092ee3c   ## 主要功能介绍 + 基于sharding-jdbc的读写分离 + 基于seata的分布式事务 + 基于nacos和gateway的动态路由和黑白名单 + 集成mybatis-plus简化开发、自动填充、代码生成 + 基于actuator+prometheus+grafana的服务状态监控 + 自定义授权逻辑 + 自定义分页 + 基于mp的分页封装: [PageInnerInterceptor](./easy-frame-base/easy-frame-base-service/src/main/java/com/easy/frame/base/service/mp/page/PageInnerInterceptor.java)、 [PageProxy](./easy-frame-base/easy-frame-base-service/src/main/java/com/easy/frame/base/service/mp/page/PageProxy.java)、 + 树状结构数据通用CRUD业务封装: [树状结构功能封装介绍](./easy-frame-base/easy-frame-base-service/src/main/java/com/easy/frame/base/service/tree/package-info.java) + 通用策略路由封装: [AbstractStrategyRouter](./easy-frame-base/easy-frame-base-basic/src/main/java/com/easy/frame/base/basic/strategy/AbstractStrategyRouter.java) [StrategyHandler](./easy-frame-base/easy-frame-base-basic/src/main/java/com/easy/frame/base/basic/strategy/StrategyHandler.java) + **通用数据权限限制SQL自动注入封装**: [介绍](./easy-frame-base/easy-frame-base-service/src/main/java/com/easy/frame/base/service/mp/dataauth/package-info.java) + 全局异常捕捉:[GlobalExceptionHandler](./easy-frame-base/easy-frame-base-service/src/main/java/com/easy/frame/base/service/base/GlobalExceptionHandler.java) + 可输出报错堆栈信息,包括报错类/方法/行信息。 + 支持分布式跨服务 + 支持异步持久化(基于Redis Stream) + 全局字典key转name:[DictFieldFillUtil](./easy-frame-base/easy-frame-base-api/src/main/java/com/easy/frame/base/api/DictFieldFillUtil.java) + 全局权限拦截 + 用户认证拦截(包括黑名单): [AuthenticationFilter](./easy-frame-common/easy-frame-common-gateway/src/main/java/com/easy/frame/gateway/AuthenticationFilter.java) + 菜单功能权限限制:[AuthenticationInterceptor](./easy-frame-base/easy-frame-base-service/src/main/java/com/easy/frame/base/service/auth/AuthenticationInterceptor.java) + 通用工作流实现 + [设计思维导图](https://www.processon.com/view/link/5f6330e47d9c0833ecf2ffd8) + 定义: [介绍](./easy-frame-common/easy-frame-common-process/src/main/java/com/easy/frame/common/process/package-info.java) + DEMO:[介绍](./easy-frame-servers/easy-frame-servers-sys/easy-frame-servers-sys-service/src/main/java/com/easy/frame/servers/sys/process/package-info.java) + 接口参数校验封装 + 实现只需要添加@NotNull等注解,无需填写其内部message属性值,自动生成返回值,可以减少不必要的重复工作! + [介绍](./easy-frame-base/easy-frame-base-api/src/main/java/com/easy/frame/base/api/validation/package-info.java) + 幂等组件 - [介绍](./easy-frame-base/easy-frame-base-api/src/main/java/com/easy/frame/base/api/idempotent/package-info.java)   ## 开发规范   后台开发请准守 [《JAVA开发手册(嵩山版)》](https://developer.aliyun.com/topic/download?spm=a2c6h.14210656.J_8497328910.3.6e411549DpaSdo&id=811) 以及[《后台开发规范》](file/后台开发规范.md) ### HttpStatus定义 - 500 系统错误/ 代码报错。显示友好提示:"系统异常,请联系管理员" - 503 无可用服务/ 可能服务崩溃或正在构建。给出友好提示:"系统状态异常,请稍后再试或联系管理员" - 401 未授权用户/ accessToken缺失/无效或非法调用权限外接口。给出提示("操作异常,请重新登陆后再试")并跳转到登录页 - 200 正常 ### 接口返回响应对象code字段值定义 - 200 正常 - 500 操作失败/ 显示响应体中`message`字段内容   ## file文件夹说明 ### db_change #### [undo.sql](./file/db_change/undo.sql)   用于记录未在正式环境上执行过的sql #### [sys_init.sql](file/db_change/init/sys_init.sql)   系统数据库初始化sql #### history 文件夹   用于归档历史数据库变动sql,当[undo.sql](./file/db_change/undo.sql)的sql在正式环境执行过之后, 归档到history文件夹内。   添加[undo.sql](./file/db_change/undo.sql)数据时,因指定时间、操作人、操作是由和具体sql。   history内文件命名方式:`YY.MM.sql`,如`20.12.sql`   根据时间将[undo.sql](./file/db_change/undo.sql)归档到history对应时间的的文件中   ## 代码结构介绍 - easyFrame - **file** `项目相关说明文件目录` - db_change `模块初始化SQL文件、后续数据库变动文件` - ... - **easy-frame-common** `工具父模块` - **easy-frame-common-redis** `redis模块,提供redis工具类和redis分布式锁` - **easy-frame-common-gateway** `网关模块,实现动态路由和登录态检测` - **easy-frame-common-generate** `代码生成模块` - **easy-frame-common-process** `流程功能模块` - **easy-frame-common-msg** `消息工具模块` TODO - ... - **easy-frame-base** `工具父模块` - **easy-frame-base-service** `service父模块,用于统一管理依赖和公共类` - **easy-frame-base-api** `api父模块,用于统一管理依赖和公共类` - **easy-frame-base-basic** `通用模块,提供全局通用对象或公共类` - ... - **easy-frame-servers** `功能服务父模块` - **easy-frame-servers-sys** `系统平台` - **easy-frame-servers-sys-service** `业务逻辑` - **easy-frame-servers-sys-api** `开放接口` - ... `其他业务模块`   ## 项目相关博客 - [Mysql json类型字段Java+Mybatis数据字典功能实践](https://blog.csdn.net/qq_38688267/article/details/107386138) - [泛型擦除问题解决--Mybatis查询类型转换](https://blog.csdn.net/qq_38688267/article/details/107483673) - [再也不用排查报错的代码位置了!](https://blog.csdn.net/qq_38688267/article/details/107309886) - [JAVA开发超好用第三方类库收集](https://blog.csdn.net/qq_38688267/article/details/107846375) - [Prometheus + Grafana 图形化监控实践](https://blog.csdn.net/qq_38688267/article/details/108101708) - [Docker安装Nacos1.4.0、Seata1.4.0并将nacos做seata注册中心](https://blog.csdn.net/qq_38688267/article/details/111590569) - [MySQL表设计也是一门技术活~](https://blog.csdn.net/qq_38688267/article/details/110220607) - [MySQL JSON类型字段使用技巧](https://blog.csdn.net/qq_38688267/article/details/112509463) - [@Validated注解参数校验功能封装](https://blog.csdn.net/qq_38688267/article/details/115720412)