# 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部署架构图 ![img.png](.image/FlyBootDeploy.png) # 服务器应用安装(建议) | 应用 | 描述 | 地址 | |------------|---------------------------|-------------------------| | 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按钮,在点击刷新图标按钮,如下图所示
![img.png](.image/maven.png) ## 4.修改配置文件 - 后台接口配置文件:fly-admin/src/main/resources/application-dev.yml - 数据库配置
![img.png](.image/mysql.png) - Redis配置
![img.png](.image/redis.png) - Elasticsearch配置(选配,非必要)
![img.png](.image/elasticsearch.png) - RabbitMQ配置(选配,非必要)
![img.png](.image/rabbitmq.png) ## 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
![img.png](.image/vueenv.png) ## 3.安装依赖 - 按如下图打开终端,用于执行相关命令
![img.png](.image/vscodeconsole.png) - 执行命令,安装依赖 ```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
![img.png](.image/gencode.png) - 提示:生成后的实体会继承 BaseEntity 类,如数据库实体的字段不包含 BaseEntity 里的字段,则把对应实体继承删掉,如下
![img.png](.image/baseentity.png) ## 切换日志存储库为Elaticsearch - 按如下图,把对应impl改为ES实现类,例如把 ApiLogServiceImpl 改为 ApiLogESServiceImpl
![img.png](.image/logstore.png) # 常见问题 ## 实体Def报错 相关数据库实体Def报错,例如sysRoleDef类报错,这些类是自动生成的,需要编译一下项目。如果已经生成但是导入不了,需找到对应业务模块,例如 fly-module-system-api 模块,按如下方法将 target/generated-sources/annotations 目录标记一下即可。
![img.png](.image/def.png) ## MyBatisFlexConfig类报错 以下这行代码报错,并不影响使用 ```java @MapperScan("com.fh.**.mapper") ``` 也可新建如图目录,解决报错
![img.png](.image/mapper.png) ## fly-common-web的ApiLogAop类、DBAop类、RateLimiterAop类报错 以下代码报错,并不影响使用 ```java @Around("execution(* com.fh.controller..*.*(..))") @Before("execution(* com.fh.controller..*.*(..))") @After("execution(* com.fh.controller..*.*(..))") ``` 也可新建如图目录,解决报错
![img.png](.image/controller.png) ## fly-common-job的DBAop类与JobLogAop类报错 以下代码报错,并不影响使用 ```java @Before("execution(* com.fh.job..*.*(..))") @Around("execution(* com.fh.job..*.*(..))") ``` 也可新建如图目录,解决报错
![img.png](.image/job.png)