Code Monkey home page Code Monkey logo

valarchie / agileboot-back-end Goto Github PK

View Code? Open in Web Editor NEW
1.4K 24.0 290.0 5.35 MB

🔥 规范易于二开的全栈基础快速开发脚手架。🔥 采用Springboot + Vue 3 + Typescript + Mybatis Plus + Redis + 更面向对象的业务建模 + 面向生产的项目(非玩具项目)。你的 ⭐️ Star ⭐️,是作者更新的动力! 欢迎小伙伴PR,一起构建一个规范的全栈项目~😆

License: MIT License

Java 99.28% Batchfile 0.32% Shell 0.40%
springboot vue3 ddd-example mybatis-plus element-ui element-plus mysql redis pinia typescript

agileboot-back-end's Introduction

Downloads Build Status Build Status Downloads Downloads Downloads

logo

AgileBoot v2.0.0

基于SpringBoot+Vue3前后端分离的Java快速开发脚手架

⚡平台简介⚡

AgileBoot是一套开源的全栈精简快速开发平台,毫无保留给个人及企业免费使用。本项目的目标是做一款精简可靠,代码风格优良,项目规范的小型开发脚手架。 适合个人开发者的小型项目或者公司内部项目使用。也可作为供初学者学习使用的案例。

  • 前端是基于优秀的开源项目Pure-Admin开发而成。在此感谢Pure-Admin作者。
  • 前端采用Vue3、Element Plus、TypeScript、Pinia。对应前端仓库 AgileBoot-Front-End ,保持同步更新。
  • 后端采用Spring Boot、Spring Security & Jwt、Redis & MySql、Mybatis Plus、Hutool工具包。
  • 权限认证使用Jwt,支持多终端认证系统。
  • 支持注解式主从数据库切换,注解式请求限流,注解式重复请求拦截。
  • 支持注解式菜单权限拦截,注解式数据权限拦截。
  • 支持加载动态权限菜单,实时权限控制。
  • 有大量的单元测试,集成测试覆盖确保业务逻辑正确

V1.0.0版本使用JS开发,V2.0.0版本使用TS开发
V1.0.0地址:后端(AgileBoot-Back-End-Basic) - 前端(AgileBoot-Front-End-Basic)

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

您的Issue比Star更重要

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

💥 在线体验 💥

演示地址:

账号密码:admin/admin123

🌴 项目背景 🌴

业余时间想做一些个人小项目,一开始找了很多开源项目比如Ruoyi / Jeecg / ElAdmin / RenRen-Fast / Guns / EAdmin
最后本项目选择基于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缓存类,封装各个业务缓存,提供多级缓存实现(Redis+Guava)
    • 提供三个层级的缓存供使用者调用(Map,Guava,Redis使用者可依情况选择使用哪个缓存类)
    • 权限判断使用多级缓存
    • IP地址查询引入离线包
    • 前端优化字典数据缓存
    • 启动优化
    • i18n支持
    • 优化excel工具类,代码更加简洁
    • 将所有逻辑集中于Domain模块中
    • 切面记录修改者和创建者
    • 统一设置事务

✨ 使用 ✨

开发环境

  • JDK
  • Mysql
  • Redis
  • Node.js

技术栈

技术 说明 版本
springboot Java项目必备框架 2.7
druid alibaba数据库连接池 1.2.8
springdoc 文档生成 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
knife4j 接口文档框架 3.0.3
Spring Task 定时任务框架(适合小型项目) follow springboot

启动说明

前置准备: 下载前后端代码

git clone https://github.com/valarchie/AgileBoot-Back-End
git clone https://github.com/valarchie/AgileBoot-Front-End

安装好Mysql和Redis

后端启动

1. 生成所需的数据库表
找到后端项目根目录下的sql目录中的agileboot_xxxxx.sql脚本文件(取最新的sql文件)。 导入到你新建的数据库中。

2. 在admin模块底下,找到resource目录下的application-dev.yml文件
配置数据库以及Redis的 地址、端口、账号密码

3. 在根目录执行mvn install

4. 找到agileboot-admin模块中的AgileBootAdminApplication启动类,直接启动即可

5. 当出现以下字样即为启动成功
  ____   _                _                                                           __         _  _ 
 / ___| | |_  __ _  _ __ | |_   _   _  _ __    ___  _   _   ___  ___  ___  ___  ___  / _| _   _ | || |
 \___ \ | __|/ _` || '__|| __| | | | || '_ \  / __|| | | | / __|/ __|/ _ \/ __|/ __|| |_ | | | || || |
  ___) || |_| (_| || |   | |_  | |_| || |_) | \__ \| |_| || (__| (__|  __/\__ \\__ \|  _|| |_| || ||_|
 |____/  \__|\__,_||_|    \__|  \__,_|| .__/  |___/ \__,_| \___|\___|\___||___/|___/|_|   \__,_||_|(_)
                                      |_|                             

前端启动

详细步骤请查看对应前端部分

1. pnpm install

2. pnpm run dev

3. 当出现以下字样时即为启动成功

vite v2.6.14 dev server running at:

> Local: http://127.0.0.1:80/

ready in 4376ms.

详细过程在这个文章中:AgileBoot - 手把手一步一步带你Run起全栈项目(SpringBoot+Vue3)

对于想要尝试全栈项目的前端人员,这边提供更简便的后端启动方式,无需配置Mysql和Redis直接启动

无Mysql/Redis 后端启动

1. 找到agilboot-admin模块下的resource文件中的application.yml文件

2. 配置以下两个值
spring.profiles.active: basic,dev
改为
spring.profiles.active: basic,test

agileboot.embedded.mysql: false
agileboot.embedded.redis: false
改为
agileboot.embedded.mysql: true
agileboot.embedded.redis: true

请注意:高版本的MacOS系统,无法启动内置的Redis


3. 找到agileboot-admin模块中的AgileBootAdminApplication启动类,直接启动即可

🙊 系统内置功能 🙊

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

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

🐯 工程结构 🐯

agileboot
├── agileboot-admin -- 管理后台接口模块(供后台调用)
│
├── agileboot-api -- 开放接口模块(供客户端调用)
│
├── agileboot-common -- 精简基础工具模块
│
├── agileboot-infrastructure -- 基础设施模块(主要是配置和集成,不包含业务逻辑)
│
├── agileboot-domain -- 业务模块
├    ├── user -- 用户模块(举例)
├         ├── command -- 命令参数接收模型(命令)
├         ├── dto -- 返回数据类
├         ├── db -- DB操作类
├              ├── entity -- 实体类
├              ├── service -- DB Service
├              ├── mapper -- DB Dao
├         ├── model -- 领域模型类
├         ├── query -- 查询参数模型(查询)
│         ├────── UserApplicationService -- 应用服务(事务层,操作领域模型类完成业务逻辑)

代码流转

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

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

这是借鉴CQRS的开发理念,将查询和操作分开处理。操作类的业务实现借鉴了DDD战术设计的理念,使用领域类,工厂类更面向对象的实现逻辑。 如果你不太适应这样的开发模式的话。可以在domain模块中按照你之前从Controller->Service->DAO的模式进行开发。it is up to you.

二次开发指南

假设你要新增一个会员member业务,可以在以下三个模块新增对应的包来实现你的业务

agileboot
├── agileboot-admin -- 
│                ├── member -- 会员模块
│
├── agileboot-domain -- 
├                ├── member -- 会员模块(举例)
├                     ├── command -- 命令参数接收模型(命令)
├                     ├── dto -- 返回数据类
├                     ├── db -- DB操作类
├                          ├── entity -- 实体类
├                          ├── service -- DB Service
├                          ├── mapper -- DB Dao
├                     ├── model -- 领域模型类
├                     ├── query -- 查询参数模型(查询)
│                     ├────── MemberApplicationService -- 应用服务(事务层,操作领域模型类完成业务逻辑)
└─

🎅 技术文档 🎅

🌻 注意事项 🌻

  • IDEA会自动将.properties文件的编码设置为ISO-8859-1,请在Settings > Editor > File Encodings > Properties Files > 设置为UTF-8
  • 请导入统一的代码格式化模板(Google): Settings > Editor > Code Style > Java > 设置按钮 > import schema > 选择项目根目录下的GoogleStyle.xml文件
  • 如需要生成新的表,请使用CodeGenerator类进行生成。
    • 填入数据库地址,账号密码,库名。然后填入所需的表名执行代码即可。(大概看一下代码就知道怎么填啦)
    • 生成的类在infrastructure模块下的target/classes目录下
    • 不同的数据库keywordsHandler方法请填入对应不同数据库handler。(搜索keywordsHandler关键字)
  • 项目基础环境搭建,请参考docker目录下的指南搭建。保姆级启动说明:
  • 注意:管理后台的后端启动类是AgileBootAdminApplication
  • Swagger的API地址为 http://localhost:8080/v3/api-docs/

🎬 AgileBoot全栈交流群 🎬

QQ群: 加入QQ群 点击按钮入群。

如果觉得该项目对您有帮助,可以小额捐赠支持本项目演示网站服务器等费用~

logo

💕 特别鸣谢

  • @pokr 感谢提供ChatGpt账号助力本项目开发

💒 相关框架

agileboot-back-end's People

Contributors

aniyayee avatar daniyyer avatar gyzhang avatar h1der avatar penbox avatar qcxy avatar thelastsunset avatar umaynit avatar valarchie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

agileboot-back-end's Issues

到底是引用command 还是dto,详情看截图

BUG描述
到底是引用command 还是dto

复现步骤
详细的复现步骤。

正确的行为
统一

详细截图
image

7ce8dcf3b6d557ebe6f5ca672625de09

桌面端:

  • 操作系统: [例如. iOS]
  • 浏览器及版本 [例如. chrome 11]
  • 项目版本 [例如. 1.6.0]

手机端:

  • 设备: [例如. iPhone6]
  • 操作系统: [例如. iOS8.1]
  • 浏览器及版本 [例如.safari 8]
  • 项目版本 [例如. 1.6.0]

Additional context
统一规范

前台项目

我想在这个项目基础上开发一个前台项目,erp系统的那种, 登录的用户表和权限菜单表是应该用现有的表还是自己新建表比较好啊, 看了好几个后台管理项目,但是都没有提到要怎么加前台项目, 我实在不知道该怎么弄比较好了, 也没有项目可以参考的, 能麻烦给个建议吗

可否将用户角色设为可多选

使用了一段时间AgileBoot写了几个项目,感觉非常不错。不过碰到个小问题,现在用户角色仅能单选,有点不太灵活,业务中有时需要多选角色,现在只能通过创建新的角色来组合角色权限,但组合情况多了的话就会变得很复杂。

咱们这个项目会 参考 COLA 架构 设计吗

您的功能请求是否与问题相关? 请描述。
清楚简明地描述问题所在。
COLA 架构

描述您想要的解决方案
对您所设想的问题的清晰简洁的描述。

描述您考虑过的替代方案
对您考虑过的任何替代解决方案或功能的清晰简洁的描述。

附加上下文
在此处添加有关功能请求的任何其他上下文或屏幕截图。

Excel导出功能支持样式设置

您的功能请求是否与问题相关? 请描述。
清楚简明地描述问题所在。

对excel导出样式设置,比如设置:字体,合并多个单元格,颜色,

描述您想要的解决方案
对您所设想的问题的清晰简洁的描述。

支持导出样式设置,比如设置:字体,合并多个单元格,颜色,

描述您考虑过的替代方案
对您考虑过的任何替代解决方案或功能的清晰简洁的描述。

尝试过easyexcel但是有点不友好

附加上下文
在此处添加有关功能请求的任何其他上下文或屏幕截图。

我可以参与项目的开发吗,哈哈哈

您的功能请求是否与问题相关? 请描述。
清楚简明地描述问题所在。

描述您想要的解决方案
对您所设想的问题的清晰简洁的描述。

描述您考虑过的替代方案
对您考虑过的任何替代解决方案或功能的清晰简洁的描述。

附加上下文
在此处添加有关功能请求的任何其他上下文或屏幕截图。

maven 依赖问题

BUG描述
[[关于BUG清晰简洁的描述。]
mybatis-plus-boot-starter:3.5.2 里 jsqlparser:4.4、mybatis:3.5.10与 pagehelper-spring-boot-starter:1.4.1 里 jsqlparser:4.2、mybatis:3.5.9 存在依赖版本冲突

复现步骤
详细的复现步骤。

正确的行为
你认为这个修复这个BUG后,正确的行为应该是什么。
pagehelper-spring-boot-starter 提供分页功能 、mybatis-plus-boot-starter 也提供分页功能,个人建议把 pagehelper-spring-boot-starter 移除,或者不想移除 pagehelper-spring-boot-starter ,可以把 pagehelper-spring-boot-starter 的 jsqlparser:4.2、mybatis:3.5.9 maven 依赖排除
如图:
image

详细截图
如果可以的话,请添加截图以帮助调查BUG.
image

桌面端:

  • 操作系统: [例如. iOS]
  • 浏览器及版本 [例如. chrome 11]
  • 项目版本 [例如. 1.6.0]

手机端:

  • 设备: [例如. iPhone6]
  • 操作系统: [例如. iOS8.1]
  • 浏览器及版本 [例如.safari 8]
  • 项目版本 [例如. 1.6.0]

Additional context
任何其他你认为有助于排查错误的信息,或者你的猜测。

APP模块授权不完善,望完善APP模块

BUG描述
APP模块授权不完善,望完善APP模块

复现步骤
APP模块授权不完善,望完善APP模块

正确的行为
APP模块授权不完善,望完善APP模块

详细截图
image

image

桌面端:

  • 操作系统: [例如. iOS]
  • 浏览器及版本 [例如. chrome 11]
  • 项目版本 [例如. 1.6.0]

手机端:

  • 设备: [例如. iPhone6]
  • 操作系统: [例如. iOS8.1]
  • 浏览器及版本 [例如.safari 8]
  • 项目版本 [例如. 1.6.0]

Additional context
任何其他你认为有助于排查错误的信息,或者你的猜测。

有没有像若依那样的代码生成的模块

您的功能请求是否与问题相关? 请描述。
清楚简明地描述问题所在。

描述您想要的解决方案
对您所设想的问题的清晰简洁的描述。

描述您考虑过的替代方案
对您考虑过的任何替代解决方案或功能的清晰简洁的描述。

附加上下文
在此处添加有关功能请求的任何其他上下文或屏幕截图。

项目中todo,建议完善

您的功能请求是否与问题相关? 请描述。
清楚简明地描述问题所在。

描述您想要的解决方案
对您所设想的问题的清晰简洁的描述。

描述您考虑过的替代方案
对您考虑过的任何替代解决方案或功能的清晰简洁的描述。

附加上下文
image

看了下缓存相关的代码,觉得太分离了

直接在UserApplicationService的相关查询方法里,默认直接调用缓存的方法,会不会好一点?
UserApplicationService里的查询方法是没缓存的,想要走缓存要通过CacheCenter
这样子很容易误调用了没缓存的查询方法

批量操作

想请问一下,如果是涉及到批量操作的话,要怎么设计模型和工厂呢

感觉数据权限那有点问题呢,不管什么权限(本部门或本部门及子部门),都是查看的本部门及子部门的数据

您的功能请求是否与问题相关? 请描述。
清楚简明地描述问题所在。

描述您想要的解决方案
对您所设想的问题的清晰简洁的描述。

描述您考虑过的替代方案
对您考虑过的任何替代解决方案或功能的清晰简洁的描述。

附加上下文
在此处添加有关功能请求的任何其他上下文或屏幕截图。

能加入不,挺感兴趣的

您的功能请求是否与问题相关? 请描述。
清楚简明地描述问题所在。

描述您想要的解决方案
对您所设想的问题的清晰简洁的描述。

描述您考虑过的替代方案
对您考虑过的任何替代解决方案或功能的清晰简洁的描述。

附加上下文
在此处添加有关功能请求的任何其他上下文或屏幕截图。

代码生成功能

若依框架带代码生成,AgileBoot有安排代码生成功能吗

Swagger访问不了,一直提示需要授权才可以访问

BUG描述
访问本地接口文档一直提示没有权限

复现步骤
必现

正确的行为
不应该登录才可以访问,可以放行

详细截图
微信图片_20240130181734

Additional context
任何其他你认为有助于排查错误的信息,或者你的猜测。

无redis,mysql运行bug

下载项目,跑了前端,没配数据库和redis,按照文档修改dev为test,以及另外两个修改为true,启动失败,自己修改了一下其他配置,启动成功但是登陆不成功

com.agileboot.domain.system.monitor.dto.ServerInfo#convertFileSize

com.agileboot.domain.system.monitor.dto.ServerInfo#convertFileSize
MB,KB数据存在小问题:

String.format(ratio > 100f ? "%.0f MB" : "%.1f MB", Constants.MB);
String.format(ratio > 100f ? "%.1f KB" : "%.1f KB", Constants.KB);
to:
String.format(ratio > 100f ? "%.0f MB" : "%.1f MB", ratio);
String.format(ratio > 100f ? "%.1f KB" : "%.1f KB",ratio);

java -jar agileboot-api-1.0.0.jar agileboot-api-1.0.0.jar中没有主清单属性

BUG描述
api目录很多都没有完善。admin都是todo

复现步骤
详细的复现步骤。

正确的行为
你认为这个修复这个BUG后,正确的行为应该是什么。

详细截图
如果可以的话,请添加截图以帮助调查BUG.
image

桌面端:

  • 操作系统: [例如. iOS]
  • 浏览器及版本 [例如. chrome 11]
  • 项目版本 [例如. 1.6.0]

手机端:

  • 设备: [例如. iPhone6]
  • 操作系统: [例如. iOS8.1]
  • 浏览器及版本 [例如.safari 8]
  • 项目版本 [例如. 1.6.0]

Additional context
任何其他你认为有助于排查错误的信息,或者你的猜测。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.