# fly-boot
**Repository Path**: zhangshaobin234/fly-boot
## Basic Information
- **Project Name**: fly-boot
- **Description**: 支持多租户与非租户模式,采用前后端分离架构,集成了Vue3高颜值后台。基于SpringBoot3.X,JDK21(支持JDK17+),Mybatis-Flex,腾讯TDesign Vue3,帮助开发者解决Java项目重复工作,让开发者更多关注业务,既能快速提高效率,节省研发成本,同时又不失灵活性。FlyBoot全部开源,个人与企业可 100% 免费使用。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 4
- **Created**: 2025-03-25
- **Last Updated**: 2025-03-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# FlyBoot快速开发平台
支持多租户与非租户模式,采用前后端分离架构,集成了Vue3高颜值后台。基于SpringBoot3.X,JDK21(支持JDK17+),Mybatis-Flex,腾讯TDesign Vue3,帮助开发者解决Java项目重复工作,让开发者更多关注业务,既能快速提高效率,节省研发成本,同时又不失灵活性。FlyBoot全部开源,个人与企业可 100% 免费使用。
# 演示地址
- 地址:https://fly.admin.iflyhou.com/login
- 账号:18888888888
- 密码:123456
# 后端技术架构
- IDE建议:IDEA (必须安装Lombok插件 )
- JDK:框架默认JDK21,支持JDK17+
- 依赖管理:Maven
- 基础框架:Spring Boot 3.1.12
- 持久层框架:Mybatis-Flex
- 数据库连接池:阿里巴巴Druid
- 数据库:MySQL/Elaticsearch
- 消息队列:RabbitMQ
- 缓存:Redis、JetCache多级缓存
- 分布式锁:基于Redisson
- 分布式限流:基于Redisson
- 其他:Retry,JWT,Easy-Es,FastJson,Lombok,Knife4j等等
# 前端技术架构
- IDE建议:VSCode
- 依赖管理:node、npm、pnpm
- 前端框架:TDesign Vue3 腾讯前端框架
- 采用Vue3+TypeScript+TDesign-Vue等新技术方案,包括二次封装组件、utils、动态菜单、权限校验、按钮级别权限控制等功能
# 后续开发计划
- 后台登录页集成行为验证码
- 编写Elaticsearch高阶用法
- 开发后台功能:通知公告/短信发送/邮件发送/代码生成/定时任务/系统监控/Redis监控
- 集成Quartz
- 开发租户管理系统
- 集成分布式ID生成
- 集成Flyway
- 集成Flowable
- 等等,规划中...
# 后端项目模块
| 一级模块 | 二级模块 | 说明 |
|----------------|-----------------------|----------------------------|
| fly-admin | | 后台接口 |
| fly-common | | 通用模块 |
| | fly-common-job | 定时器通用模块 |
| | fly-common-mybatis | MyBatis通用模块 |
| | fly-common-third | 第三方通用模块 |
| | fly-common-util | 工具类通用模块 |
| | fly-common-web | Web通用模块 |
| fly-job | | 定时器 |
| fly-module | | 业务模块 |
| | fly-module-log | 日志业务模块 |
| | fly-module-system | 系统业务模块 |
| fly-module-api | | 业务接口模块(解耦模块之间互相调用,方便拓展微服务) |
| | fly-module-log-api | 日志业务接口模块 |
| | fly-module-system-api | 系统业务接口模块 |
# 系统功能
| 功能 | 描述 |
|-----------|----------------------------------------------------------------------------------------------|
| 用户管理 | 对系统用户管理,修改密码等等 |
| 部门管理 | 管理部门,以树形结构进行展示 |
| 角色管理 | 对角色进行功能菜单/操作按钮授权,数据范围授权 |
| 职位管理 | 管理公司职位 |
| 租户管理 | 管理租户,支持 Saas 多租户场景 |
| 租户套餐 | 管理租户套餐,可自定义租户的功能菜单、操作按钮的权限 |
| 租户内置角色 | 可以管理租户系统的内置角色,例如新增默认超级管理员角色,普通员工角色 |
| 菜单管理 | 支持多系统菜单/按钮管理,提供高性能二级缓存(本地Caffeine缓存+远程Redis缓存) |
| 参数配置 | 管理系统中的固定参数 |
| 日志配置 | 可对各种场景的日志进行个性化配置,例如日志开关,慢日志开关,慢日志阈值,日志保存天数,目前支持这些场景的日志:接口日志、定时器日志、sql日志、登录日志、第三方接口日志、第三方回调日志 |
| 数据字典 | 管理系统中常用的固定数据 |
| APP版本 | 对APP版本进行管理,如发布新版本,控制APP强制更新,非强制更新 |
| 地区管理 | 内嵌国内省份、城市、区镇数据 |
| 系统配置 | 对系统Logo,系统名称,系统版本,版权信息,文件存储引擎(本地存储、七牛云存储)进行灵活的自定义配置 |
| 文件配置 | 配置本地文件存储、七牛文件存储的参数 |
| 规则管理 | 以富文本形式,自定义系统的各种规则,例如隐私政策、服务协议 |
| 文件管理 | 将文件上传到本地服务器、七牛云,支持文件回收站 |
| 接口文档 | Knife4j接口文档 |
| 接口日志审计 | 记录接口调用日志,有日常日志(由于数据量大默认关闭,开发调试环境可通过日志配置开启)和慢日志,支持MySQL和Elasticsearch存储,可通过配置文件灵活切换存储模式 |
| 定时器日志审计 | 记录定时器执行日志,支持MySQL和Elasticsearch存储,可通过配置文件灵活切换存储模式 |
| sql日志审计 | 记录sql慢日志,支持MySQL和Elasticsearch存储,可通过配置文件灵活切换存储模式 |
| 登录日志审计 | 记录用户登录/登出日志,支持MySQL和Elasticsearch存储,可通过配置文件灵活切换存储模式 |
| 第三方接口日志审计 | 记录第三方接口调用日志,有日常日志和慢日志,例如第三方快递接口调用,支持MySQL和Elasticsearch存储,可通过配置文件灵活切换存储模式 |
| 第三方回调日志审计 | 记录第三方接口回调日志,例如支付宝支付回调,微信退款回调,支持MySQL和Elasticsearch存储,可通过配置文件灵活切换存储模式 |
| 在线用户 | 显示在线用户,支持强退用户 |
| Druid监控 | Druid监控 |
# 框架
| 框架 | 说明 | 版本 | 学习指南 |
|--------------------------|------------------------------|-------------|-------|
| SpringBoot | 应用开发框架 | 3.1.12 | [文档](https://spring.io/projects/spring-boot) |
| MySQL | 数据库 | 8.0.33 |[文档](https://www.mysql.com/cn/)|
| Druid | JDBC连接池、监控组件 | 1.2.23 | [文档](https://github.com/alibaba/druid) |
| MyBatis-Flex | MyBatis增强工具包,更轻量、更灵活、以及更高的性能 | 1.9.8 |[文档](https://mybatis-flex.com/)|
| Redis | key-value 数据库 | 3.1.12 |[文档](https://redis.io/)|
| Redisson | Redis客户端 | 3.37.0 |[文档](https://github.com/redisson/redisson)|
| JetCache | 分布式多级缓存框架 | 2.7.7 |[文档](https://github.com/alibaba/jetcache)|
| Retry | 异常自动重试框架 | 2.0.10 |[文档](https://github.com/spring-projects/spring-retry)|
| FastJson | JSON工具库 | 2.0.53 |[文档](https://github.com/alibaba/fastjson)|
| Lombok | 消除冗长的Java代码 | 1.18.34 |[文档](https://projectlombok.org/)|
| Knife4j | 集Swagger2和OpenAPI3的接口文档 | 4.5.0 |[文档](https://doc.xiaominfo.com/docs/quick-start)|
| Hutool | 小而全的Java工具类库 | 5.8.32 |[文档](https://hutool.cn/)|
| Pinyin4j | 支持中文字符和拼音之间的转换 | 2.5.1 |[文档](https://pinyin4j.sourceforge.net/)|
| oshi | 获取操作系统和硬件信息 | 6.6.5 |[文档](https://github.com/oshi/oshi)|
| Google ZXing Core | 二维码生成与解析 | 3.5.3 |[文档](https://github.com/zxing/zxing)|
| Hibernate Validator | 参数校验组件 | 8.0.1.Final |[文档](https://github.com/hibernate/hibernate-validator)|
| Java Jwt | 身份验证和授权 | 4.4.0 |[文档](https://github.com/jwtk/jjwt)|
| Dom4j | 读写XML文件 | 1.6.1 |[文档](https://dom4j.github.io/)|
| MapStruct | Java Bean 转换 | 1.6.2 |[文档](https://mapstruct.org/)|
| TransmittableThreadLocal | 解决线程池场景下的变量传递问题 | 2.14.5 |[文档](https://github.com/alibaba/transmittable-thread-local)|
| bcprov | 国密 | 1.78.1 |[文档](https://www.bouncycastle.org/)|
| EasyExcel | Excel处理工具 | 4.0.3 |[文档](https://easyexcel.opensource.alibaba.com/)|
| Jsoup | HTML解析器 | 1.18.1 |[文档](https://jsoup.org/)|
| smart | 动态切换实现类 | 0.2.0 |[文档](https://github.com/burukeYou/spring-smart-di)|
| Easy-Es | 傻瓜级ElasticSearch搜索引擎ORM框架 | 2.0.0 |[文档](https://www.easy-es.cn/)|
| ip2region | IP查询 | 2.7.0 |[文档](https://gitee.com/lionsoul/ip2region)|
| qiniu | 七牛云SDK | 7.16.0 |[文档](https://www.qiniu.com/)|
| weixin-java-mp | 微信Java开发工具包 | 4.6.5.B |[文档](https://gitee.com/binary/weixin-java-tools)|
# FlyBoot部署架构图

# 服务器应用安装(建议)
| 应用 | 描述 | 地址 |
|------------|---------------------------|-------------------------|
| 1Panel | Linux服务器运维管理面板 | [地址](https://1panel.cn) |
| OpenResty | 基于Nginx和LuaJIT的高性能Web应用服务器 |[地址](https://openresty.org/cn/)|
| JumpServer | 开源堡垒机,符合 4A 规范的专业运维安全审计系统 |[地址](https://www.jumpserver.org/)|
| uuWAF | WEB 应用防火墙 |[地址](https://waf.uusec.com/)|
# 后端快速启动
## 1.环境搭建
- JDK21(支持JDK17+)
- Maven
- IDEA
- Redis
- MySQL
- Elaticsearch(选配,非必要)
## 2.初始化数据库
- 预先创建好 fly-boot 与 fly-boot-log 数据库,建议数据库字符集为utf8mb4,排序规则为utf8mb4_unicode_ci
- 找到目录:sql
- 在对应数据库执行对应数据库文件,分别为 fly-boot.sql 与 fly-boot-log.sql
- 脚本作用:会自动创建对应数据表,并初始化数据
## 3.安装Maven依赖
- 点击IDEA最右侧Maven按钮,在点击刷新图标按钮,如下图所示

## 4.修改配置文件
- 后台接口配置文件:fly-admin/src/main/resources/application-dev.yml
- 数据库配置

- Redis配置

- Elasticsearch配置(选配,非必要)

- RabbitMQ配置(选配,非必要)

## 5.启动项目
- 右击执行下面类,启动项目
```java
fly-admin/src/main/java/com/fh/AdminApplication.java
```
## 6.访问接口文档
```java
http://127.0.0.1:8888/doc.html
账号:admin
密码:123456
```
# 前端快速启动
## 1.环境搭建
- Node.js
- pnpm
- VSCode
## 2.配置后台接口地址
- 用VSCode打开前端目录:fly-boot/fly-admin-ui
- 修改文件:.env.development

## 3.安装依赖
- 按如下图打开终端,用于执行相关命令

- 执行命令,安装依赖
```java
pnpm install
```
## 4.启动前端项目
- 执行命令,启动项目
```java
pnpm run dev
```
## 5.访问系统
- 地址:http://127.0.0.1:3002/login
- 账号:18888888888
- 密码:123456
# 帮助文档
## 代码生成器
- 目前生成方式如下,后续会在后台管理系统新增代码生成功能
- 参考:fly-admin/src/main/java/com/fh/controller/test/TestCaseController

- 提示:生成后的实体会继承 BaseEntity 类,如数据库实体的字段不包含 BaseEntity 里的字段,则把对应实体继承删掉,如下

## 切换日志存储库为Elaticsearch
- 按如下图,把对应impl改为ES实现类,例如把 ApiLogServiceImpl 改为 ApiLogESServiceImpl

# 常见问题
## 实体Def报错
相关数据库实体Def报错,例如sysRoleDef类报错,这些类是自动生成的,需要编译一下项目。如果已经生成但是导入不了,需找到对应业务模块,例如 fly-module-system-api 模块,按如下方法将 target/generated-sources/annotations 目录标记一下即可。

## MyBatisFlexConfig类报错
以下这行代码报错,并不影响使用
```java
@MapperScan("com.fh.**.mapper")
```
也可新建如图目录,解决报错

## fly-common-web的ApiLogAop类、DBAop类、RateLimiterAop类报错
以下代码报错,并不影响使用
```java
@Around("execution(* com.fh.controller..*.*(..))")
@Before("execution(* com.fh.controller..*.*(..))")
@After("execution(* com.fh.controller..*.*(..))")
```
也可新建如图目录,解决报错

## fly-common-job的DBAop类与JobLogAop类报错
以下代码报错,并不影响使用
```java
@Before("execution(* com.fh.job..*.*(..))")
@Around("execution(* com.fh.job..*.*(..))")
```
也可新建如图目录,解决报错
