Skip to content

Swagger、缓存与对象存储

作者: luote (luote) · 个人主页 luote996.cn

本章介绍脚手架中的接口文档、缓存方案、文件存储与 AI 校验,属于后端进阶但 0 基础读者也应知道「它们是干什么的」。

SpringDoc OpenAPI(Swagger)

作用

自动生成可交互的 HTTP 接口文档,开发阶段在浏览器里直接试调接口,无需先写前端页面。

访问地址

本地启动后端后打开:

text
http://localhost:8080/swagger-ui.html

常用注解

注解作用
@TagController 分组名称
@Operation接口摘要
@Parameter参数说明
@SchemaDTO/VO 字段说明

在 Swagger 中先调 /auth/captcha 获取验证码,再调 /auth/login,拿到 Token 后点击 Authorize 填入 Bearer <token>,即可测试需登录的接口。

JetCache 缓存

为什么需要缓存

读多写少的场景(如用户信息)每次都查 MySQL 压力大。缓存把热点数据放内存或 Redis,降低延迟与数据库负载。

缓存问题(了解概念)

问题含义脚手架对策
穿透查不存在的数据,缓存拦不住空值缓存、布隆过滤器思路
击穿热点 key 过期瞬间大量请求打穿 DB互斥锁、逻辑过期
雪崩大量 key 同时过期随机 TTL
热点 key单个 key 访问量极大本地缓存 + 分散
大 keyvalue 过大拖慢 Redis拆分、压缩

详见 缓存方案

在代码中的样子

UserCacheService 等对查询方法加 @Cached,更新/删除时 @CacheInvalidate。具体 key 规则与 TTL 见 CacheConstant 与配置项 luote.cache.*

MinIO 与阿里云 OSS

对象存储是什么

图片、视频、文档等文件不适合存 MySQL,应存 对象存储。MinIO 是可自建的 S3 兼容服务;阿里云 OSS 是云厂商托管方案。

StorageService 抽象

StorageService 接口统一 uploaddeletegetUrlStorageServiceImpl 优先写 MinIO,失败时可回落 OSS(保底),对 Controller 透明。

FileController 提供上传接口,返回可访问 URL 给前端展示。

配置

.env 中配置 MinIO/OSS 的 endpoint、accessKey、bucket 等,见 环境变量

Spring AI Alibaba(通义千问)

作用

对用户输入内容做 AI 校验,例如注册昵称是否违规、评论是否含敏感信息。

使用方式

在方法上标注 @AiValidate,AOP 切面 AiValidationAspect 调用 DashScope API,不通过则抛出业务异常。

需在 .env 配置 DASHSCOPE_API_KEY。未配置或关闭开关时不影响主流程(按项目配置而定,以 LuoteProperties 为准)。

与 luote 脚手架的关系

模块入口文件
Swaggerconfig/SwaggerConfig.java
缓存common/cache/*、guide/cache.md
存储service/impl/StorageServiceImpl.java
AI 校验common/ai/AiValidationAspect.java

完成本章后,后端技术栈主线已覆盖。接下来学习前端章节,或直接进入 二次开发入门

下一章(前端):TypeScript 基础

MIT Licensed