{"id":14973000,"url":"https://github.com/valarchie/agileboot-back-end","last_synced_at":"2025-04-10T23:21:47.579Z","repository":{"id":62270181,"uuid":"547692663","full_name":"valarchie/AgileBoot-Back-End","owner":"valarchie","description":"🔥   规范易于二开的全栈基础快速开发脚手架。🔥  采用Springboot + Vue 3 + Typescript + Mybatis Plus + Redis + 更面向对象的业务建模 + 面向生产的项目（非玩具项目）。你的 ⭐️ Star ⭐️，是作者更新的动力！ 欢迎小伙伴PR，一起构建一个规范的全栈项目~😆","archived":false,"fork":false,"pushed_at":"2024-12-31T06:26:28.000Z","size":5429,"stargazers_count":1962,"open_issues_count":14,"forks_count":372,"subscribers_count":28,"default_branch":"main","last_synced_at":"2025-04-03T16:03:52.281Z","etag":null,"topics":["ddd-example","element-plus","element-ui","mybatis-plus","mysql","pinia","redis","springboot","typescript","vue3"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/valarchie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-08T05:30:57.000Z","updated_at":"2025-04-03T09:24:10.000Z","dependencies_parsed_at":"2024-01-16T09:00:44.075Z","dependency_job_id":"37950b47-d1d4-47f5-971e-3a85b84e2571","html_url":"https://github.com/valarchie/AgileBoot-Back-End","commit_stats":{"total_commits":254,"total_committers":18,"mean_commits":14.11111111111111,"dds":"0.12598425196850394","last_synced_commit":"0bc4148a3497298a17b6e959131c5301404ed7a3"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valarchie%2FAgileBoot-Back-End","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valarchie%2FAgileBoot-Back-End/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valarchie%2FAgileBoot-Back-End/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valarchie%2FAgileBoot-Back-End/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/valarchie","download_url":"https://codeload.github.com/valarchie/AgileBoot-Back-End/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248313175,"owners_count":21082812,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ddd-example","element-plus","element-ui","mybatis-plus","mysql","pinia","redis","springboot","typescript","vue3"],"created_at":"2024-09-24T13:47:55.028Z","updated_at":"2025-04-10T23:21:47.555Z","avatar_url":"https://github.com/valarchie.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003cp align=\"center\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/Release-V1.8.0-green.svg\" alt=\"Downloads\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/JDK-1.8+-green.svg\" alt=\"Build Status\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"Build Status\"\u003e\n   \u003cimg src=\"https://img.shields.io/badge/Spring%20Boot-2.7.1-blue.svg\" alt=\"Downloads\"\u003e\n   \u003ca target=\"_blank\" href=\"https://bladex.vip\"\u003e\n   \u003cimg src=\"https://img.shields.io/badge/Author-valarchie-ff69b4.svg\" alt=\"Downloads\"\u003e\n \u003c/a\u003e\n \u003ca target=\"_blank\" href=\"https://bladex.vip\"\u003e\n   \u003cimg src=\"https://img.shields.io/badge/Copyright%20-@Agileboot-%23ff3f59.svg\" alt=\"Downloads\"\u003e\n \u003c/a\u003e\n \u003c/p\u003e  \n\u003cp align=\"center\"\u003e\n\n\u003cimg alt=\"logo\" height=\"200\" src=\"https://oscimg.oschina.net/oscnet/up-eda2a402cc061f1f5f40d9ac4c084f4c98c.png\"\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\" style=\"margin: 30px 0 30px; font-weight: bold;\"\u003eAgileBoot v2.0.0 \u003c/h1\u003e\n\u003ch4 align=\"center\"\u003e基于SpringBoot+Vue3前后端分离的Java快速开发脚手架\u003c/h4\u003e\n\u003cp align=\"center\"\u003e\n\u003c/p\u003e\n\n## ⚡平台简介⚡\n\nAgileBoot是一套开源的全栈精简快速开发平台，毫无保留给个人及企业免费使用。本项目的目标是做一款精简可靠，代码风格优良，项目规范的小型开发脚手架。\n适合个人开发者的小型项目或者公司内部项目使用。也可作为供初学者学习使用的案例。\n\n\n* 前端是基于优秀的开源项目[Pure-Admin](https://github.com/pure-admin/vue-pure-admin)开发而成。在此感谢Pure-Admin作者。\n* 前端采用Vue3、Element Plus、TypeScript、Pinia。对应前端仓库 [AgileBoot-Front-End](https://github.com/valarchie/AgileBoot-Front-End) ，保持同步更新。\n* 后端采用Spring Boot、Spring Security \u0026 Jwt、Redis \u0026 MySql、Mybatis Plus、Hutool工具包。\n* 权限认证使用Jwt，支持多终端认证系统。\n* 支持注解式主从数据库切换，注解式请求限流，注解式重复请求拦截。\n* 支持注解式菜单权限拦截，注解式数据权限拦截。\n* 支持加载动态权限菜单，实时权限控制。\n* ***有大量的单元测试，集成测试覆盖确保业务逻辑正确***。\n\n***V1.0.0版本使用JS开发，V2.0.0版本使用TS开发***。  \n***V1.0.0地址：[后端(AgileBoot-Back-End-Basic)](https://github.com/valarchie/AgileBoot-Back-End-Basic) -  [前端(AgileBoot-Front-End-Basic)](https://github.com/valarchie/AgileBoot-Front-End-Basic)***\n\n\u003e 有任何问题或者建议，可以在 _Issues_ 中提给作者。  \n\u003e \n\u003e 您的Issue比Star更重要\n\u003e\n\u003e 如果觉得项目对您有帮助，可以来个Star ⭐\n\n\n## 💥 在线体验 💥\n演示地址：\n- www.agileboot.vip\n- www.agileboot.cc\n\u003e  账号密码：admin/admin123\n\n\n## 🌴 项目背景 🌴\n业余时间想做一些个人小项目，一开始找了很多开源项目比如Ruoyi / Jeecg / ElAdmin / RenRen-Fast / Guns / EAdmin  \n最后本项目选择基于Ruoyi项目进行完全重构改造。  \n首先非常感谢Ruoyi作者。但是Ruoyi项目存在太多缺陷。\n- 命名比较乱七八糟（很多很糟糕的命名，包括机翻英语乱用）\n- 项目分包以及模块比较乱\n- 比较原始的Controller \u003e Service \u003e DAO的开发模式。过于面向过程。\n- 一大堆自己造的轮子，并且没有UT覆盖。\n- 大量逻辑嵌套在if else块当中\n- 值的前后不统一，比如有的地方1代表是，有的地方1代表否\n- 很多很奇怪的代码写法（比如return result \u003e 0 ? true:false..    一言难尽）\n- 业务逻辑不集中，代码可读性较差。\n\n\n于是我做了大量的重构工作。\n\n### 重构内容\n\n- 规范：\n    - 切分不同环境的启动文件\n    - 统一设计异常类\n    - 统一设计错误码并集中处理异常\n    - 统一系统内的变量并集中管理\n    - 统一返回模型\n    - 引入Google代码格式化模板\n    - 后端代码的命名基本都整改OK\n    - 前端代码的命名也非常混乱，进行了整改\n    - 规范系统内的常量\n- 整改：\n    - 引入hutool包以及guava包去掉大量自己造的轮子，尽可能使用现成的轮子\n    - 去除代码中大量的warning\n    - 引入lombok去除大量getter setter代码\n    - 调整日志级别\n    - 字典类型数据完全用Enum进行代替\n    - 移除SQL注入的Filter，因为迁移到Mybatis Plus就不会有这个注入的问题\n    - XSS直接通过JSON序列化进行转义。\n    - 替换掉很多Deprecated的类以及配置\n    - 替换fastJson为Jackson\n    - 数据库的整体重构设计，缩减至10张表。\n    - 重新设计异步代码\n    - 前后端密码加密传输（更严谨的话，还是需要HTTPS）\n    - 重构权限校验和数据权限校验（直接都通过注解的形式）\n- 优化：\n    - 优化异步服务\n    - 优化Redis缓存类，封装各个业务缓存，提供多级缓存实现（Redis+Guava）\n    - 提供三个层级的缓存供使用者调用（Map,Guava,Redis使用者可依情况选择使用哪个缓存类）\n    - 权限判断使用多级缓存\n    - IP地址查询引入离线包\n    - 前端优化字典数据缓存\n    - 启动优化\n    - i18n支持\n    - 优化excel工具类，代码更加简洁\n    - 将所有逻辑集中于Domain模块中\n    - 切面记录修改者和创建者\n    - 统一设置事务\n\n## ✨ 使用 ✨\n\n\n### 开发环境\n\n- JDK\n- Mysql\n- Redis\n- Node.js\n\n### 技术栈\n\n| 技术             | 说明              | 版本                |\n|----------------|-----------------|-------------------|\n| `springboot`   | Java项目必备框架      | 2.7               |\n| `druid`        | alibaba数据库连接池   | 1.2.8             |\n| `springdoc`    | 文档生成            | 3.0.0             |\n| `mybatis-plus` | 数据库框架           | 3.5.2             |\n| `hutool`       | 国产工具包（简单易用）     | 3.5.2             |\n| `mockito`      | 单元测试模拟          | 1.10.19           |\n| `guava`        | 谷歌工具包（提供简易缓存实现） | 31.0.1-jre        |\n| `junit`        | 单元测试            | 1.10.19           |\n| `h2`           | 内存数据库           | 1.10.19           |\n| `jackson`      | 比较安全的Json框架     | follow springboot |\n| `knife4j`      | 接口文档框架          | 3.0.3             |\n| `Spring Task`  | 定时任务框架（适合小型项目）  | follow springboot |\n\n\n### 启动说明\n\n#### 前置准备： 下载前后端代码\n\n```\ngit clone https://github.com/valarchie/AgileBoot-Back-End\ngit clone https://github.com/valarchie/AgileBoot-Front-End\n```\n\n#### 安装好Mysql和Redis\n\n\n#### 后端启动\n```\n1. 生成所需的数据库表\n找到后端项目根目录下的sql目录中的agileboot_xxxxx.sql脚本文件(取最新的sql文件)。 导入到你新建的数据库中。\n\n2. 在admin模块底下，找到resource目录下的application-dev.yml文件\n配置数据库以及Redis的 地址、端口、账号密码\n\n3. 在根目录执行mvn install\n\n4. 找到agileboot-admin模块中的AgileBootAdminApplication启动类，直接启动即可\n\n5. 当出现以下字样即为启动成功\n  ____   _                _                                                           __         _  _ \n / ___| | |_  __ _  _ __ | |_   _   _  _ __    ___  _   _   ___  ___  ___  ___  ___  / _| _   _ | || |\n \\___ \\ | __|/ _` || '__|| __| | | | || '_ \\  / __|| | | | / __|/ __|/ _ \\/ __|/ __|| |_ | | | || || |\n  ___) || |_| (_| || |   | |_  | |_| || |_) | \\__ \\| |_| || (__| (__|  __/\\__ \\\\__ \\|  _|| |_| || ||_|\n |____/  \\__|\\__,_||_|    \\__|  \\__,_|| .__/  |___/ \\__,_| \\___|\\___|\\___||___/|___/|_|   \\__,_||_|(_)\n                                      |_|                             \n\n```\n\n#### 前端启动\n详细步骤请查看对应前端部分\n\n```\n1. pnpm install\n\n2. pnpm run dev\n\n3. 当出现以下字样时即为启动成功\n\nvite v2.6.14 dev server running at:\n\n\u003e Local: http://127.0.0.1:80/\n\nready in 4376ms.\n\n```\n\n详细过程在这个文章中：[AgileBoot - 手把手一步一步带你Run起全栈项目(SpringBoot+Vue3)](https://juejin.cn/post/7153812187834744845)\n\n\n\u003e 对于想要尝试全栈项目的前端人员，这边提供更简便的后端启动方式，无需配置Mysql和Redis直接启动\n#### 无Mysql/Redis 后端启动\n```\n1. 找到agilboot-admin模块下的resource文件中的application.yml文件\n\n2. 配置以下两个值\nspring.profiles.active: basic,dev\n改为\nspring.profiles.active: basic,test\n\nagileboot.embedded.mysql: false\nagileboot.embedded.redis: false\n改为\nagileboot.embedded.mysql: true\nagileboot.embedded.redis: true\n\n请注意:高版本的MacOS系统，无法启动内置的Redis\n\n\n3. 找到agileboot-admin模块中的AgileBootAdminApplication启动类，直接启动即可\n```\n\n\n## 🙊 系统内置功能 🙊  \n  \n\n🙂 大部分功能，均有通过 **单元测试** **集成测试** 保证质量。\n\n|     | 功能    | 描述                              |\n|-----|-------|---------------------------------|\n|     | 用户管理  | 用户是系统操作者，该功能主要完成系统用户配置          |\n| ⭐   | 部门管理  | 配置系统组织机构（公司、部门、小组），树结构展现支持数据权限  |\n| ⭐   | 岗位管理  | 配置系统用户所属担任职务                    |\n|     | 菜单管理  | 配置系统菜单、操作权限、按钮权限标识等，本地缓存提供性能    |\n| ⭐   | 角色管理  | 角色菜单权限分配、设置角色按机构进行数据范围权限划分      |\n|     | 参数管理  | 对系统动态配置常用参数                     |\n|     | 通知公告  | 系统通知公告信息发布维护                    |\n| 🚀  | 操作日志  | 系统正常操作日志记录和查询；系统异常信息日志记录和查询     |\n|     | 登录日志  | 系统登录日志记录查询包含登录异常                |\n|     | 在线用户  | 当前系统中活跃用户状态监控                   |\n|     | 系统接口  | 根据业务代码自动生成相关的api接口文档            |\n|     | 服务监控  | 监视当前系统CPU、内存、磁盘、堆栈等相关信息         |\n|     | 缓存监控  | 对系统的缓存信息查询，命令统计等                |\n|     | 连接池监视 | 监视当前系统数据库连接池状态，可进行分析SQL找出系统性能瓶颈 |\n\n\n## 🐯 工程结构 🐯\n\n``` \nagileboot\n├── agileboot-admin -- 管理后台接口模块（供后台调用）\n│\n├── agileboot-api -- 开放接口模块（供客户端调用）\n│\n├── agileboot-common -- 精简基础工具模块\n│\n├── agileboot-infrastructure -- 基础设施模块（主要是配置和集成，不包含业务逻辑）\n│\n├── agileboot-domain -- 业务模块\n├    ├── user -- 用户模块（举例）\n├         ├── command -- 命令参数接收模型（命令）\n├         ├── dto -- 返回数据类\n├         ├── db -- DB操作类\n├              ├── entity -- 实体类\n├              ├── service -- DB Service\n├              ├── mapper -- DB Dao\n├         ├── model -- 领域模型类\n├         ├── query -- 查询参数模型（查询）\n│         ├────── UserApplicationService -- 应用服务（事务层，操作领域模型类完成业务逻辑）\n\n```\n\n### 代码流转\n\n请求分为两类：一类是查询，一类是操作（即对数据有进行更新）。\n\n**查询**：Controller \u003e xxxQuery \u003e xxxApplicationService \u003e xxxService(Db) \u003e xxxMapper  \n**操作**：Controller \u003e xxxCommand \u003e xxxApplicationService \u003e xxxModel(处理逻辑) \u003e save 或者 update (本项目直接采用JPA的方式进行插入已经更新数据)\n\n这是借鉴CQRS的开发理念，将查询和操作分开处理。操作类的业务实现借鉴了DDD战术设计的理念，使用领域类，工厂类更面向对象的实现逻辑。 \n如果你不太适应这样的开发模式的话。可以在domain模块中按照你之前从Controller-\u003eService-\u003eDAO的模式进行开发。it is up to you.\n\n\n\n### 二次开发指南\n\n假设你要新增一个会员member业务，可以在以下三个模块新增对应的包来实现你的业务\n``` \nagileboot\n├── agileboot-admin -- \n│                ├── member -- 会员模块\n│\n├── agileboot-domain -- \n├                ├── member -- 会员模块（举例）\n├                     ├── command -- 命令参数接收模型（命令）\n├                     ├── dto -- 返回数据类\n├                     ├── db -- DB操作类\n├                          ├── entity -- 实体类\n├                          ├── service -- DB Service\n├                          ├── mapper -- DB Dao\n├                     ├── model -- 领域模型类\n├                     ├── query -- 查询参数模型（查询）\n│                     ├────── MemberApplicationService -- 应用服务（事务层，操作领域模型类完成业务逻辑）\n└─\n```\n\n\n\n--- \n\n## 🎅 技术文档 🎅\n* [AgileBoot - 基于SpringBoot + Vue3的前后端快速开发脚手架](https://juejin.cn/post/7152871067151777829)\n* [AgileBoot - 手把手一步一步带你Run起全栈项目(SpringBoot+Vue3)](https://juejin.cn/post/7153812187834744845)\n* [AgileBoot - 项目内统一的错误码设计](https://juejin.cn/post/7156062116712022023)\n* [AgileBoot - 如何集成内置数据库H2和内置Redis](https://juejin.cn/post/7158793441198112781)\n* [AgileBoot - Mybatis Plus 框架项目落地实践总结](https://juejin.cn/post/7202573260659195963)\n* [AgileBoot - SpringBoot项目多层级多环境yml设计](https://juejin.cn/post/7205171975647215676)\n* [AgileBoot - 项目中多级缓存设计实践总结](https://juejin.cn/post/7208112485764857914)\n* 持续输出中\n\n\n\n## 🌻 注意事项 🌻\n- IDEA会自动将.properties文件的编码设置为ISO-8859-1,请在Settings \u003e Editor \u003e File Encodings \u003e Properties Files \u003e 设置为UTF-8\n- 请导入统一的代码格式化模板（Google）: Settings \u003e Editor \u003e Code Style \u003e Java \u003e 设置按钮 \u003e import schema \u003e 选择项目根目录下的GoogleStyle.xml文件\n- 如需要生成新的表，请使用CodeGenerator类进行生成。\n  - 填入数据库地址，账号密码，库名。然后填入所需的表名执行代码即可。（大概看一下代码就知道怎么填啦）\n  - 生成的类在infrastructure模块下的target/classes目录下\n  - 不同的数据库keywordsHandler方法请填入对应不同数据库handler。（搜索keywordsHandler关键字）\n- 项目基础环境搭建，请参考docker目录下的指南搭建。保姆级启动说明：\n  - [AgileBoot - 手把手一步一步带你Run起全栈项目(SpringBoot+Vue3)](https://juejin.cn/post/7153812187834744845)\n- 注意：管理后台的后端启动类是AgileBoot**Admin**Application\n- Swagger的API地址为 http://localhost:8080/v3/api-docs\n\n## 🎬 AgileBoot全栈交流群 🎬\n\nQQ群：  [![加入QQ群](https://img.shields.io/badge/1398880-blue.svg)](https://qm.qq.com/cgi-bin/qm/qr?k=TR5guoXS0HssErVWefmdFRirJvfpEvp1\u0026jump_from=webapi\u0026authKey=VkWMmVhp/pNdWuRD8sqgM+Sv2+Vy2qCJQSeLmeXlLtfER2RJBi6zL56PdcRlCmTs) 点击按钮入群。\n\n\n如果觉得该项目对您有帮助，可以小额捐赠支持本项目演示网站服务器等费用~\n\n\n\u003cimg alt=\"logo\" height=\"200\" src=\"https://oscimg.oschina.net/oscnet/up-28b63fdd7b3ce003bd30c25883f2276212b.png\"\u003e\n\n## 💕 特别鸣谢\n\n\n- \u003ca href=\"https://github.com/FerryboatSeranade\" target=\"_blank\"\u003e@pokr\u003c/a\u003e 感谢提供ChatGpt账号助力本项目开发\n\n## 💒 相关框架\n- 基于node.js开发的后端 \u003ca href=\"https://gitee.com/TsMask/mask_api_midwayjs\" target=\"_blank\"\u003eMidwayjs\u003c/a\u003e \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalarchie%2Fagileboot-back-end","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvalarchie%2Fagileboot-back-end","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalarchie%2Fagileboot-back-end/lists"}