# simple-admin-quarkus **Repository Path**: gu-beichen-starlight/simple-admin-quarkus ## Basic Information - **Project Name**: simple-admin-quarkus - **Description**: 学习quarkus - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-12-13 - **Last Updated**: 2026-01-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Simple Admin Quarkus ## 项目介绍 Simple Admin Quarkus 是 [Simple Admin Mini](https://gitee.com/gu-beichen-starlight/simple-admin) 的 **Quarkus 改造版本** ,将原 Spring Boot 架构迁移至 Quarkus 云原生框架,大幅提升了应用性能、资源利用率和启动速度,同时保留了完整的AI功能和业务特性。 该系统基于 **Quarkus 3.27.1 + DJL(Deep Java Library)+ Vue3** 构建,具备如下核心功能: - 🚀 **云原生架构**:基于 Quarkus 框架,可选 GraalVM Native Image - 🤖 **AI 图像识别**:集成多种深度学习模型(YOLO、人脸检测、语义分割等) - 🏢 **多租户权限管理**:完整的 RBAC 权限控制系统 - 📊 **向量数据库**:基于 pgvector + MyBatis Plus 进行向量数据存储 - 🗄️ **现代化存储**:Redis 缓存 + MinIO 对象存储 - 📈 **监控告警**:集成 Prometheus 指标和健康检查 - 🌐 **容器化部署**:完整的 Docker Compose 编排支持 > ✅ 本项目展示了传统 Spring Boot 应用向云原生 Quarkus 架构的迁移实践! --- ## 🎯 Quarkus vs Spring Boot 对比 ### 资源占用对比 | 指标 | Spring Boot | Quarkus | 说明 | |------|-------------|----------|----------------------| | 镜像大小 | ~615MB | ~610MB | 基本相当(均使用 OpenJDK 17) | | 内存占用 | ~725MB | ~275MB | Quarkus 内存优化更好 | | 启动时间 | ~8-12秒 | ~6-10秒 | 略有提升 | | 响应延迟 | ~50-100ms | ~40-80ms | 轻微改善 | > 💡 **说明**: 当前版本基于 OpenJDK 17 运行,如果使用 GraalVM Native Image 编译,性能将会有数量级提升,但考虑到部署复杂性,暂未提供此版本。 ### 架构对比图 #### Quarkus 架构 ![Quarkus Architecture](./doc/quarkus.png) #### Spring Boot 架构 ![Spring Boot Architecture](./doc/springboot.png) --- ## 🚀 功能特性 ### 🤖 AI/计算机视觉功能 - ✅ **图像分类** (Image Classification) - 支持多种预训练模型 - ✅ **目标检测** (Object Detection) - YOLO 系列,实时检测 - ✅ **语义分割** (Semantic Segmentation) - 像素级图像理解 - ✅ **人脸检测** (Face Detection) - 人脸定位与特征提取 - ✅ **口罩检测** (Mask Detection) - 疫情防护相关检测 - ✅ **YOLO World** - 开放词汇目标检测 - ✅ **模型热加载** - 支持在线更新和动态切换 ### 🏢 系统管理功能 - ✅ **多租户支持** (Tenant Management) - 数据隔离 - ✅ **用户权限管理** (RBAC) - 细粒度权限控制 - ✅ **菜单权限控制** - 动态菜单配置 - ✅ **系统参数配置** - 灵活的配置管理 - ✅ **操作日志记录** - 完整的审计追踪 - ✅ **数据字典管理** - 系统基础数据维护 ### 🛠️ 技术特性 - ✅ **云原生设计** - 容器化优先,支持 Kubernetes - ✅ **GraalVM Native** - 亚毫秒级启动,极低内存占用 - ✅ **响应式编程** - 非阻塞 I/O,高并发处理 - ✅ **健康检查** - 完整的监控和告警体系 - ✅ **API 文档** - 自动生成 OpenAPI/Swagger 文档 --- ## 🛠️ 技术选型 | 类别 | 技术栈 | 说明 | |------------|----------------------------------|-------------------------------| | **核心框架** | Quarkus 3.27.1 | 云原生 Java 框架,支持 GraalVM Native | | **Web 框架** | RESTEasy + Undertow | 高性能 Jakarta REST 实现 | | **AI 框架** | Deep Java Library (DJL) 0.35.0 | 深度学习框架,支持多引擎 | | **数据库** | PostgreSQL + pgvector | 向量数据库支持 | | **ORM** | MyBatis Plus 2.4.0 | 增强型 MyBatis | | **缓存** | Redis 7 | 高性能内存数据库 | | **文件存储** | MinIO 7.1.2 | S3 兼容对象存储 | | **权限认证** | Sa-Token | 轻量级权限框架 | | **前端框架** | Vue3 + TypeScript + Element Plus | 现代化前端技术栈 | | **监控指标** | Micrometer + Prometheus | 应用性能监控 | | **构建工具** | Maven 3.x + Docker | 标准化构建部署 | --- ## 📁 项目结构 ``` simple-admin-quarkus/ ├── src/main/java/com/saq/ │ ├── api/ # REST API接口层 │ │ ├── ActuatorResource.java # 系统监控端点 │ │ ├── DjlCvResource.java # 计算机视觉API │ │ ├── LoginResource.java # 认证授权 │ │ └── [业务API...] │ ├── domain/ # 实体类 │ ├── service/ # 业务逻辑层 │ ├── mapper/ # MyBatis数据访问层 │ ├── config/ # 配置类 │ ├── tool/ # 工具类 │ ├── djl/ # 深度学习模块 │ │ ├── cv/ # 计算机视觉服务 │ │ │ ├── ImageClassificationService.java │ │ │ ├── ObjectDetectionService.java │ │ │ ├── SemanticSegmentationService.java │ │ │ └── YoloDetectionService.java │ │ └── face/ # 人脸识别服务 │ └── Application.java # Quarkus启动类 ├── src/main/resources/ │ ├── application.yml # 主配置文件 │ └── META-INF/resources/ # 静态资源 ├── simple-ui/ # 前端Vue3项目 ├── sql/ # 数据库脚本 │ └── quarkus.sql # 完整建表脚本 ├── doc/ # 文档和截图 │ ├── quarkus.png # Quarkus架构图 │ ├── springboot.png # Spring Boot架构图 │ ├── system.png # 系统架构图 │ ├── classification.png # 图像分类演示 │ ├── detection.png # 目标检测演示 │ ├── face.png # 人脸检测演示 │ └── segmentation.png # 语义分割演示 ├── docker-compose.yaml # Docker编排文件 ├── Dockerfile # 后端镜像构建 ├── pom.xml # Maven配置 └── README.md # 项目文档 ``` --- ## 🚀 快速开始 ### 环境要求 - **JDK 17+** (推荐使用 GraalVM 22.x+ 用于 Native 编译) - **Docker & Docker Compose** (用于快速启动) - **Node.js 16.x+** (前端开发) - **Maven 3.8.x+** ### 🐳 一键启动 (推荐) 使用 Docker Compose 一键启动完整环境: ```bash # 克隆项目 git clone https://gitee.com/gu-beichen-starlight/simple-admin-quarkus.git cd simple-admin-quarkus # 启动所有服务 (数据库+缓存+存储+后端+前端) docker-compose up -d # 查看服务状态 docker-compose ps ``` 访问地址: - **前端界面**: http://localhost:16789 - **后端API**: http://localhost:14399/saq - **API文档**: http://localhost:14399/saq/q/swagger-ui - **健康检查**: http://localhost:14399/saq/q/health - **MinIO控制台**: http://localhost:9001 (admin/admin_public) ### 🔧 本地开发模式 #### 1. 启动基础服务 ```bash # 启动数据库、Redis、MinIO docker-compose up -d pgvector redis minio ``` #### 2. 配置数据库 确保 PostgreSQL 已安装 `pgvector` 插件: ```sql CREATE EXTENSION IF NOT EXISTS vector; ``` 导入数据库结构: ```bash # 使用 Docker 自动导入 (已在 docker-compose 中配置) # 或手动导入: psql -h localhost -U postgres -d simple_admin -f sql/quarkus.sql ``` #### 3. 启动后端服务 ```bash # 开发模式 (支持热重载) ./mvnw quarkus:dev # 或者传统模式 ./mvnw package java -jar target/quarkus-app/quarkus-run.jar ``` #### 4. 启动前端界面 ```bash cd simple-ui npm install npm run dev ``` 访问地址: - **前端界面**: http://localhost:5173 - **后端API**: http://localhost:14399/saq - **API文档**: http://localhost:14399/saq/q/swagger-ui ### 🚀 生产环境部署 #### JVM 模式部署 ```bash # 打包应用 ./mvnw package # 启动应用 java -jar target/quarkus-app/quarkus-run.jar ``` #### Native 模式部署 (可选) > ⚠️ **注意**: Native 编译过程较为复杂,建议仅在需要极致性能时使用。 ```bash # 安装 GraalVM # curl -sL https://get.graalvm.org | bash # 编译 Native 可执行文件 ./mvnw package -Dnative # 运行 Native 应用 (性能大幅提升) ./target/simple-admin-quarkus-1.0.0-runner ``` #### Docker 生产部署 ```bash # 构建镜像 docker build -t simple-admin-quarkus:latest . # 运行容器 docker run -d \ --name simple-admin-quarkus \ -p 14399:14399 \ -e QUARKUS_DATASOURCE_JDBC_URL=jdbc:postgresql://host:5432/simple_admin \ -e QUARKUS_DATASOURCE_USERNAME=postgres \ -e QUARKUS_DATASOURCE_PASSWORD=your_password \ simple-admin-quarkus:latest ``` --- ## 📖 使用说明 ### 1. 登录系统 - **默认账号**: `admin` - **默认密码**: `123456` ### 2. AI 功能使用 #### 图像识别模块 1. **图像分类** - 上传图片到"图像分类"模块 - 系统返回分类结果和置信度 - 支持多种预训练模型(ResNet、MobileNet等) 2. **目标检测** - 选择检测模型(YOLOv5/v8等) - 上传图片进行实时检测 - 返回目标框坐标、类别和置信度 3. **语义分割** - 像素级别的图像理解 - 支持多种分割模型 - 可视化分割结果 4. **人脸检测** - 人脸定位和特征提取 - 支持多人脸检测 - 输出人脸坐标和特征向量 ### 3. 系统管理 - **用户管理**: 用户增删改查、角色分配 - **角色管理**: 角色权限配置、菜单权限 - **菜单管理**: 动态菜单配置、权限控制 - **系统配置**: 参数配置、字典管理 - **操作日志**: 用户行为审计追踪 ### 4. 模型管理 - **模型上传**: 支持多种深度学习模型格式 - **模型切换**: 在线切换不同的AI模型 - **模型监控**: 查看模型性能和使用统计 --- ## 📊 界面截图 ### 系统管理界面 ![系统管理](./doc/system.png) ### 图像分类演示 ![图像分类](./doc/classification.png) ### 目标检测演示 ![目标检测](./doc/detection.png) ### 人脸检测演示 ![人脸检测](./doc/face.png) ### 语义分割演示 ![语义分割](./doc/segmentation.png) --- ## 🔧 配置说明 ### 主要配置项 (application.yml) ```yaml quarkus: application: name: simple-admin-quarkus # HTTP 配置 http: port: 14399 root-path: /saq # 数据库配置 datasource: db-kind: postgresql jdbc: url: jdbc:postgresql://127.0.0.1:5432/simple_admin?currentSchema=quarkus username: postgres password: admin_public # Redis 配置 redis: hosts: redis://127.0.0.1:6379 # 线程池配置 thread-pool: core-threads: 16 max-threads: 32 ``` ### MinIO 配置 ```yaml minio: host: http://127.0.0.1:9000 access-key: admin secret-key: admin_public enable: true ``` --- ## 🆚 与 Spring Boot 版本的对比 | 特性 | Simple Admin Mini (Spring Boot) | Simple Admin Quarkus | 优势说明 | |---------------|---------------------------------|----------------------|------------| | **启动时间** | ~8-12秒 | ~6-10秒 | 轻微改善 | | **内存占用** | ~725MB | ~275MB | **62% 节省** | | **容器镜像** | ~615MB | ~610MB | 基本相当 | | **响应延迟** | ~50-100ms | ~40-80ms | 轻微提升 | | **云原生支持** | 有限 | 原生支持 | 完整云原生生态 | | **Native 编译** | 不支持 | 支持 | 可选的极致性能 | | **开发体验** | 成熟 | 现代 | 热重载、Dev UI | | **资源成本** | 较高 | 较低 | 内存成本显著降低 | | **AI 功能** | ✅ 完整 | ✅ 完整 | 功能保持一致 | | **前端技术** | ✅ Vue3 | ✅ Vue3 | 技术栈一致 | --- ## 🛠️ 开发指南 ### 添加新的 AI 模型 1. 在 `src/main/java/com/saq/djl/cv/` 下创建新的服务类 2. 继承 `BaseCjService` 并实现相应方法 3. 在 `DjlCvResource` 中添加新的 API 端点 4. 更新前端模型选择列表 ### 自定义权限验证 ```java @SaCheckPermission("user:add") @POST @Path("/users") public Response createUser(User user) { // 业务逻辑 } ``` ### 使用缓存 ```java @CacheResult(cacheName = "users") public User getUserById(Long id) { return userMapper.selectById(id); } ``` ### 数据库分页 ```java Page page = new Page<>(currentPage, pageSize); IPage result = userMapper.selectPage(page, queryWrapper); ``` --- ## 🔍 监控和运维 ### 健康检查 ```bash # 应用健康状态 curl http://localhost:14399/saq/q/health # 存活检查 curl http://localhost:14399/saq/q/health/live # 就绪检查 curl http://localhost:14399/saq/q/health/ready ``` ### Prometheus 指标 ```bash # 应用指标 curl http://localhost:14399/saq/q/metrics ``` ### 日志查看 ```bash # Docker 容器日志 docker-compose logs -f simple-admin-quarkus-java-test # 应用日志文件 tail -f logs/application.log ``` --- ## ❓ 常见问题 ### 1. **Native 编译失败?** - 确保安装了 GraalVM - 添加 native-image 依赖 - 检查反射配置是否完整 - Native 编译较为复杂,建议优先使用 JVM 模式 ### 2. **模型加载失败?** - 检查模型文件路径是否正确 - 确保支持的模型格式(ONNX、PyTorch、MXNet) - 验证 DJL 依赖版本兼容性 ### 3. **数据库连接问题?** - 确认 pgvector 插件已启用 - 检查数据库连接配置 - 验证 schema 设置 ### 4. **MinIO 上传失败?** - 检查 MinIO 服务状态 - 验证 Access Key 和 Secret Key - 确认 Bucket 权限配置 ### 5. **前端无法访问后端?** - 检查 CORS 配置 - 验证 API 基础路径设置 - 确认端口和防火墙设置 --- ## 🤝 贡献指南 欢迎提交 PR 和 Issue! 1. **Fork 项目** 2. **创建功能分支** (`git checkout -b feature/amazing-feature`) 3. **提交更改** (`git commit -m 'Add some amazing feature'`) 4. **推送分支** (`git push origin feature/amazing-feature`) 5. **发起 Pull Request** ### 开发规范 - 遵循 Java 代码规范 - 编写单元测试 - 更新相关文档 - 确保所有检查通过 --- ## 📄 许可证 本项目采用 Apache-2.0 许可证。详情请查看 [LICENSE](LICENSE) 文件。 --- ## 🔗 相关链接 - **原项目**: [Simple Admin](https://gitee.com/gu-beichen-starlight/simple-admin) - **Quarkus 官网**: - **DJL 文档**: - **Vue3 Admin**: --- ## 🙏 致谢 感谢以下开源项目的支持: - [Quarkus](https://quarkus.io/) - 云原生 Java 框架 - [Deep Java Library](https://djl.ai/) - 深度学习框架 - [Vue3](https://vuejs.org/) - 渐进式前端框架 - [Element Plus](https://element-plus.org/) - Vue3 UI 库 - [PostgreSQL](https://www.postgresql.org/) - 开源数据库 - [Redis](https://redis.io/) - 内存数据库 - [MinIO](https://min.io/) - 对象存储服务 --- 如需了解更多信息或遇到问题,欢迎提交 Issue 或联系维护者!