space-test / README.md
fdwei4
init: Spring Boot demo with MySQL + Redis
49c44b0
|
Raw History Blame Contribute Delete
6.59 kB
---
title: HF Space Spring Boot Demo
emoji: 🚀
colorFrom: green
colorTo: blue
sdk: docker
app_port: 7860
pinned: false
---
# HuggingFace Space Spring Boot Demo
**基于 wfly-spring 生产配置的最简示例**(SQLPub MySQL + Upstash Redis + Druid + MyBatis Plus)。
> ⚠️ 本文件顶部的 YAML 头是 HuggingFace Space **必需**的配置块:
> - `sdk: docker` 声明用 Docker 部署
> - `app_port: 7860` 告诉平台容器监听哪个端口
## ✨ 特性
- **真实凭据**:直接复用 `wfly-spring/application-dev.yaml` 的 SQLPub + Upstash 配置,无需另外注册
- **生产级组件**:Druid 连接池 + MyBatis Plus + Redisson
- **Druid 监控**:访问 `/druid/` 查看连接池实时状态
- **零配置启动**:凭据已内置在 `application.yml`(敏感信息可改走环境变量)
## 📚 文档索引
| 文档 | 说明 |
|---|---|
| [README.md](./README.md)(本文) | 快速入门 + 本地运行 + 基础部署 |
| [ARCHITECTURE.md](./ARCHITECTURE.md) | **零成本生产级架构**(MySQL / Redis / CloudFlare DDNS) |
| [DEPLOY.md](./DEPLOY.md) | **部署 Checklist**(逐步操作清单 + 常见问题) |
| [application.yml.example](./application.yml.example) | Spring Boot 配置模板 |
| [.env.example](./.env.example) | 环境变量模板 |
## 目录结构
```
huggingface-space-springboot-demo/
├── Dockerfile # 多阶段构建:Maven 打包 + JRE 运行
├── .dockerignore
├── pom.xml # 依赖:Druid / MyBatis Plus / Redis / Redisson
├── init.sql # 数据库初始化脚本(建表 + 测试数据)
├── README.md # 本文件,顶部 YAML 是 Space 配置
└── src/main/
├── java/com/example/hfspace/
│ ├── HfSpaceApplication.java # 启动类(@MapperScan)
│ ├── config/
│ │ └── MyBatisPlusMetaObjectHandler.java # 自动填充 createTime/updateTime
│ ├── controller/
│ │ ├── HelloController.java # 首页 HTML + /api/hello
│ │ ├── DemoController.java # Demo CRUD(MyBatis Plus)
│ │ └── CacheController.java # Redis 缓存示例
│ ├── dataobject/
│ │ └── DemoDO.java # Demo 实体(MyBatis Plus)
│ └── mapper/
│ └── DemoMapper.java # MyBatis Plus Mapper
└── resources/
└── application.yml # 配置(直接含 wfly-spring 凭据)
```
## 为什么用多阶段 Dockerfile
Java 是编译型语言,需要先把源码打成 jar 再运行。所以 Dockerfile 分两段:
1. **构建阶段**(`maven:3.9-eclipse-temurin-17`):`mvn package` 打出 jar
2. **运行阶段**(`eclipse-temurin:17-jre`):只装 JRE,体积小、启动快
这样最终镜像不含 Maven 和源码,干净又轻量。
## 本地运行(快速验证)
### 方式一:直接跑(凭据已内置)
```bash
# 1. 先在 SQLPub 数据库执行 init.sql(建表)
mysql -h mysql6.sqlpub.com -P 3311 -u vftdream -p vftdream < init.sql
# 密码:jwKGBhsqVEbwyviK
# 2. 启动应用
mvn spring-boot:run
# 3. 浏览器打开
open http://localhost:7860
```
### 方式二:Docker(和线上环境一致)
```bash
docker build -t hf-springboot-demo .
docker run -p 7860:7860 hf-springboot-demo
```
### 验证接口
- **首页**:http://localhost:7860 (含完整接口列表)
- **MySQL CRUD**:
```bash
# 列表
curl http://localhost:7860/api/demo
# 创建
curl -X POST http://localhost:7860/api/demo \
-H "Content-Type: application/json" \
-d '{"title":"Test","content":"Hello World"}'
# 查询
curl http://localhost:7860/api/demo/1
```
- **Redis 缓存**:
```bash
# 健康检查
curl http://localhost:7860/api/cache/health
# 存缓存
curl -X POST http://localhost:7860/api/cache \
-H "Content-Type: application/json" \
-d '{"key":"foo","value":"bar","ttl":60}'
# 读缓存
curl http://localhost:7860/api/cache/foo
```
- **Druid 监控**:http://localhost:7860/druid/ (用户名 `admin` / 密码 `admin123`)
## 部署到 HuggingFace Space
```bash
# 1. 在 https://huggingface.co/new-space 创建 Docker / Blank 空间
# 2. 克隆该空间仓库
git clone https://huggingface.co/spaces/<用户名>/<空间名>
cd <空间名>
# 3. 把本目录所有文件拷进去,提交推送
git add .
git commit -m "init spring boot demo"
git push
# push 时用户名填用户名,密码填 write 权限的 Access Token
```
推送后平台自动构建(首次构建会下依赖,约几分钟),状态变 `Running` 即可访问:
`https://<用户名>-<空间名>.hf.space`
## 接口
| 路径 | 方法 | 说明 |
|---|---|---|
| **基础接口** | | |
| `/` | GET | 首页 HTML(含接口列表) |
| `/api/hello` | GET | 返回 JSON |
| **MySQL 示例**(Demo CRUD,MyBatis Plus) | | |
| `/api/demo` | GET | 列出所有项 |
| `/api/demo` | POST | 创建(Body: `{"title":"Test","content":"Hello"}`) |
| `/api/demo/{id}` | GET | 查询单个 |
| `/api/demo/{id}` | PUT | 更新 |
| `/api/demo/{id}` | DELETE | 删除(逻辑删除) |
| **Redis 示例**(Upstash 缓存) | | |
| `/api/cache/health` | GET | Redis 健康检查 |
| `/api/cache` | POST | 存缓存(Body: `{"key":"foo","value":"bar","ttl":60}`) |
| `/api/cache/{key}` | GET | 读缓存 |
| `/api/cache/{key}` | DELETE | 删缓存 |
| **Druid 监控** | | |
| `/druid/` | GET | 数据库连接池监控(用户名: admin / 密码: admin123) |
## 凭据来源
此 demo 直接复用 `wfly-spring/application-dev.yaml` 的真实配置:
| 组件 | 地址 | 说明 |
|---|---|---|
| **MySQL master** | `mysql6.sqlpub.com:3311/vftdream` | SQLPub 免费实例(用户 `vftdream`) |
| **Redis** | `hot-boa-127738.upstash.io` | Upstash 主库(TLS 端口 6379) |
⚠️ **注意**:
- Demo 数据会写入真实数据库(`demo_items` 表)
- 生产环境建议单独配置数据源(通过 HF Space Secrets 覆盖环境变量)
## 生产部署(完整架构)
本 demo 只演示最小可运行容器。要接入真实的数据库 / Redis / 自定义域名,见:
**📘 [ARCHITECTURE.md](./ARCHITECTURE.md) — 零成本生产级部署架构**
涵盖:
- 免费 MySQL(SQLPub 500MB)
- 免费 Redis(Upstash 10K 命令/天)
- CloudFlare DDNS(自定义域名 + CDN + WAF)
- Spring Boot 配置示例 + 环境变量注入 + 定时任务脚本