平台简介

AgileBoot是一套开源的全栈精简快速开发平台,毫无保留给个人及企业免费使用。本项目的目标是做一款精简可靠代码风格优良项目规范的小型开发脚手架。

适合个人开发者的小型项目或者公司内部项目使用。也可作为供初学者学习使用的模板项目。

  • 前端采用Vue3、Element UI。对应前端仓库 AgileBoot-Front-End ,保持同步更新。
  • 后端采用Spring Boot、Spring Security、Redis & Jwt、Mybatis Plus、MySql。
  • 权限认证使用Jwt,支持多终端认证系统。
  • 支持加载动态权限菜单,多方式轻松权限控制。
  • 有大量的单元测试,集成测试覆盖确保业务逻辑正确。

有任何问题或者建议,可以在 Issues 中提给作者。 也可以发PR。

您的Issue比Star更重要

如果觉得项目对您有帮助,可以来个 Star

在线体验

演示地址:

账号密码:admin/admin123

项目地址:

项目背景

本项目基于Ruoyi项目进行完全重构改造。

首先非常感谢Ruoyi作者。但是Ruoyi项目存在太多缺陷。

  • 命名比较乱七八糟(很多很糟糕的命名,包括机翻英语乱用)
  • 项目分包以及模块比较乱
  • 比较原始的Controller > Service > DAO的开发模式。过于面向过程。
  • 一大堆自己造的轮子,并且没有UT覆盖。
  • 大量逻辑嵌套在if else块当中
  • 值的前后不统一,比如有的地方1代表是,有的地方1代表否
  • 很多很奇怪的代码写法(比如return result > 0 ? true:false.. 一言难尽)
  • 业务逻辑不集中,代码可读性较差。

很多人直接使用开源项目二开,但是代码不规范,可维护性不高,导致使用者的二开的成本比较高。

于是我做了大量的重构工作。

重构内容

  • 规范:

    • 切分不同环境的启动文件
    • 统一设计异常类
    • 统一设计错误码并集中处理异常
    • 统一系统内的变量并集中管理
    • 统一返回模型
    • 引入Google代码格式化模板
    • 后端代码的命名基本都整改OK
    • 前端代码的命名也非常混乱,进行了整改
    • 规范系统内的常量
  • 整改:
    • 引入hutool包以及guava包去掉大量自己造的轮子,尽可能使用现成的轮子
    • 去除代码中大量的warning
    • 引入lombok去除大量getter setter代码
    • 调整日志级别
    • 字典类型数据完全用Enum进行代替
    • 移除SQL注入的Filter,因为迁移到Mybatis Plus就不会有这个注入的问题
    • XSS直接通过JSON序列化进行转义。
    • 替换掉很多Deprecated的类以及配置
    • 替换fastJson为Jackson
    • 数据库的整体重构设计,缩减至10张表。
    • 重新设计异步代码
    • 前后端密码加密传输(更严谨的话,还是需要HTTPS)
    • 重构权限校验和数据权限校验(直接都通过注解的形式)
  • 优化:
    • 优化异步服务
    • 优化Redis缓存类,封装各个业务缓存,提供多级缓存实现
    • 权限判断使用多级缓存
    • IP地址查询引入离线包
    • 前端优化字典数据缓存
    • 启动优化
    • i18n支持
    • 优化excel工具类,代码更加简洁
    • 将所有逻辑集中于Domain模块中
    • 切面记录修改者和创建者
    • 统一设置事务

使用

技术栈

技术 说明 版本
springboot Java项目必备框架 2.7
druid alibaba数据库连接池 1.2.8
swagger 文档生成 3.0.0
mybatis-plus 数据库框架 3.5.2
hutool 国产工具包(简单易用) 3.5.2
mockito 单元测试模拟 1.10.19
guava 谷歌工具包(提供简易缓存实现) 31.0.1-jre
junit 单元测试 1.10.19
h2 内存数据库 1.10.19
jackson 比较安全的Json框架 follow springboot

系统内置功能

大部分功能,均有通过 单元测试 集成测试 保证质量。

功能 描述
用户管理 用户是系统操作者,该功能主要完成系统用户配置
部门管理 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限
岗位管理 配置系统用户所属担任职务
菜单管理 配置系统菜单、操作权限、按钮权限标识等,本地缓存提供性能
角色管理 角色菜单权限分配、设置角色按机构进行数据范围权限划分
参数管理 对系统动态配置常用参数
通知公告 系统通知公告信息发布维护
操作日志 系统正常操作日志记录和查询;系统异常信息日志记录和查询
登录日志 系统登录日志记录查询包含登录异常
在线用户 当前系统中活跃用户状态监控
系统接口 根据业务代码自动生成相关的api接口文档
服务监控 监视当前系统CPU、内存、磁盘、堆栈等相关信息
缓存监控 对系统的缓存信息查询,命令统计等
连接池监视 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈

目前版本是V1.6,将在2.0版本后陆续新增新功能。

工程结构

agileboot
├── agileboot-admin -- 管理后台接口模块(供后台调用)

├── agileboot-api -- 开放接口模块(供客户端调用)

├── agileboot-common -- 精简基础工具模块

├── agileboot-infrastructure -- 基础设施模块(主要是配置和集成)

├── agileboot-domain -- 业务模块
├ ├── user -- 用户模块(举例)
├ ├── command -- 命令参数接收模型(命令)
├ ├── dto -- 返回数据类
├ ├── model -- 领域模型类
├ ├── query -- 查询参数模型(查询)
│ ├────── UserApplicationService -- 应用服务(事务层,操作领域模型类完成业务逻辑)

├── agileboot-integration-test -- 集成测试模块

├── agileboot-orm -- 数据映射模块(仅包含数据相关逻辑)
├ ├── entiy -- 实体类
├ ├── enums -- 数据相关枚举
├ ├── mapper -- DAO
├ ├── query -- 封装查询对象
├ ├── result -- 封装多表查询对象
└── └── service -- 服务层

代码流转

请求分为两类:一类是查询,一类是操作(即对数据有进行更新)。

查询:Controller > xxxQuery > xxxApplicationService > xxxService(Db) > xxxMapper

操作:Controller > xxxCommand > xxxApplicationService > xxxModel(处理逻辑) > save 或者 update (本项目直接采用JPA的方式进行插入已经更新数据)


技术文档

最后

本项目的目标是做一款精简可靠,代码风格优良,项目规范的小型开发脚手架。

适合个人开发者的小型项目或者公司内部项目使用。也可作为供初学者学习使用的案例。

希望大佬们有兴趣的话~ 可以一起来完善这个项目,让这个项目更规范,代码更好维护,真正成为一款能作为生产直接使用的开源项目。

PS: 鄙人前端小白,仅在对应的ruoyi原版前端项目上做了大概50%的重构。能力有限,有没有前端大佬一起来重构一下前端项目呀~~ 目前打算改成TS。

全栈技术交流群:1398880

Agileboot 1.6.0 发布啦 - 一款致力于规范/精简/可维护 的Springboot + Vue3的快速开发脚手架的更多相关文章

  1. 基于SpringBoot+AntDesign的快速开发平台,JeecgBoot 2.0.2 版本发布

    Jeecg-Boot 是一款基于SpringBoot+代码生成器的快速开发平台! 采用前后端分离架构:SpringBoot,Ant-Design-Vue,Mybatis,Shiro,JWT. 强大的代 ...

  2. 在线Online表单来了!JeecgBoot 2.1 版本发布——基于SpringBoot+AntDesign的快速开发平台

    项目介绍 Jeecg-Boot 是一款基于SpringBoot+代码生成器的快速开发平台! 采用前后端分离架构:SpringBoot,Ant-Design-Vue,Mybatis,Shiro,JWT. ...

  3. AgileBoot - 基于SpringBoot + Vue3的前后端快速开发脚手架

    AgileBoot 仓库 后端地址:https://github.com/valarchie/AgileBoot-Back-End 技术栈:Springboot / Spring Security / ...

  4. 基于SpringBoot+Mybatis+AntDesign快速开发平台,Jeecg-Boot 1.1 版本发布

    Jeecg-Boot 1.1 版本发布,初成长稳定版本 导读     平台首页UI升级,精美的首页支持多模式 提供4套代码生成器模板(支持单表.一对多) 集成Excel简易工具类,支持单表.一对多导入 ...

  5. JeecgBoot 2.1.1 代码生成器AI版本发布,基于SpringBoot+AntDesign的JAVA快速开发平台

    此版本重点升级了 Online 代码生成器,支持更多的控件生成,所见即所得,极大的提高开发效率:同时做了数据库兼容专项工作,让 Online 开发兼容更多数据库:Mysql.SqlServer.Ora ...

  6. 联发科发布全球首款搭载Android TV的智能电视系统芯片MT5595

    联发科发布全球首款搭载Android TV的智能电视系统芯片MT5595 admin 资讯 01-07 1 1月7日消息,联发科宣布与Google共同开发出全世界第一个搭载Android TV操作系统 ...

  7. 网页动物园2.0发布,经过几个月的努力,采用JAVA编写!

    网页动物园2.0发布,经过几个月的努力,采用JAVA编写! 网页动物园2.0 正式发布!游戏发布 游戏名称: 网页动物园插件 游戏来源: 原创插件 适用版本: Discuz! X1.5 - X3.5 ...

  8. Google 高性能 RPC 框架 gRPC 1.0.0 发布(附精彩评论)

    gRPC是一个高性能.开源.通用的RPC框架,面向移动和HTTP/2设计,是由谷歌发布的首款基于Protocol Buffers的RPC框架. gRPC基于HTTP/2标准设计,带来诸如双向流.流控. ...

  9. RDIFramework.NET平台代码生成器V1.0发布(提供下载)

    RDIFramework.NET平台代码生成器V1.0发布(提供下载)   RDIFramework.NET(.NET快速开发整合框架)框架做为信息化系统快速开发.整合的框架,其目的一至是给用户和开发 ...

  10. Surging1.0发布在即,.NET开发者们,你们还在等什么?

    Surging1.0发布在即,.NET开发者们,你们还在等什么? 开源,是近三十年来互联网经久不衰的话题.它不仅仅是一种技术分享的形态,更是一种开放,包容,互利共赢的互联网精神. 不到30年前,大神林 ...

随机推荐

  1. Kubernetes ConfigMap热更新

    ConfigMap是用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在etcd中. 总结 更新 ConfigMap 后: 使用该 ConfigMap 挂载的 Env 不会同步更新 ...

  2. esp-idf 安装(Windows )

    esp32的开发有两种环境,分别是 Arduino 和 esp32-idf. Arduino 是在 esp32-idf 基础上进行封装的,虽然使用起来比较方便,但是能自由更改的就变少了,适合新手使用. ...

  3. PAT (Basic Level) Practice 1028 人口普查 分数 20

    某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 200 岁的老人,而今天是 2014 ...

  4. PAT (Basic Level) Practice (中文)1015 德才论 分数 25

    宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子 ...

  5. mac通过docker一键部署Nexus3

    目录 mac通过docker一键部署Nexus3 一.前言 二.系统配置 三.安装步骤 1.Dockerhub查看镜像地址 2.一键安装 2.1.克隆脚本 2.2.安装程序 2.2.1.程序安装详情 ...

  6. .NET周报【10月第2期 2022-10-17】

    主题 宣布 .NET 7 发布候选版本 2 - .NET Blog https://devblogs.microsoft.com/dotnet/announcing-dotnet-7-rc-2/ .N ...

  7. 【杂谈】2021-CSP退役记

    Part1:复赛前一周 感觉复赛来的好快...... 我还没 颓够 准备好就来了QAQ 根据模拟赛 爆零 的光辉事迹,这次复赛我特别慌,虽然但是还是不想复习 但无所谓了,复赛一下子就只剩一天了 Par ...

  8. `<jsp:getProperty>`动作和`<jsp:setProperty>`动作的使用在一个静态页面填写图书的基本信息,页面信息提交给其他页面,并且在其页面显示。要去将表单元素的值赋值给Java

    <jsp:getProperty>动作和<jsp:setProperty>动作的使用 1.<jsp:getProperty>动作 语法格式: <jsp:get ...

  9. java 新特性之 Stream API

    强大的 Stream API 一.Stream API 的概述 Stream到底是什么呢? 是数据渠道,用于操作数据源(集合.数组等)所生成的元素序列. "集合讲的是数据,Stream讲的是 ...

  10. 7.pyagem-游戏背景

    背景交替滚动 游戏启动后,背景图像不断的向下移动 在视觉上产生角色不断向上移动的错觉 游戏背景不断变化,游戏主角的位置报错不变   实现方案 创建两张背景图 第一张完全和屏幕重合,第二章在屏幕的正上方 ...