软件工程课程大作业 - 下午第三组
这是一个基于 Spring Boot 和微服务架构思想构建的后端系统,为我们的“类小红书”微信小程序及 Web 管理后台提供 API 支持。
本项目采用现代化的 Java 后端技术栈,容器化部署。
开发语言: Java 17 (LTS) 核心框架: Spring Boot 3.x 数据库: PostgreSQL 15 (支持 JSONB 与向量扩展) ORM 框架: MyBatis-Plus (高效的数据库操作与动态 SQL) 缓存: Redis 7 (用于 Session 管理、验证码、高频计数) 服务器:Aliyun 对象存储: Aliyun OSS (存储图片、视频资源) 反向代理: Nginx (端口转发、静态资源托管) 容器化: Docker & Docker Compose API 文档: Apifox / Swagger / OpenAPI 3 搜索分词: Jieba Analysis (中文分词与关键词提取) 即时通讯: Tencent Cloud IM (集成用户签名生成 UserSig)
系统采用典型的分层架构,并预留了 AI 模块的扩展接口。
graph TD User[小程序/Web端] --> Nginx[Nginx 网关 (80/443)] Nginx -->|/api/auth & /api/user| Boot[Spring Boot 后端 (8080)] Nginx -->|/| Static[Web 管理后台静态资源] Boot --> PG[(PostgreSQL)] Boot --> Redis[(Redis 缓存)] Boot --> OSS[阿里云 OSS] Boot -->|异步调用| AI[AI 服务 (Python/预留)]
混合存储策略 (Polyglot Persistence)
异步事件驱动 (Event-Driven Consistency)
Spring Events + @Async 实现业务解耦。UserUpdateEvent 异步触发 MongoDB 中冗余数据的批量更新。Auth 模块:
User 模块:
Post 模块:
Interaction 模块:
graph TD Request[前端请求 JSON] --> DTO DTO --> Controller Controller --> Service subgraph 业务逻辑 Service --> Utils Service --> Mapper end Mapper --> Entity Entity <--> DB[(PostgreSQL)] Service --> VO VO --> Result[统一响应: Result] Result --> Response[前端响应 JSON]
写给组员的话: 本项目是一个基于 Spring Boot + PostgreSQL + MongoDB 的混合架构后端。在运行代码前,请务必按照以下步骤配置你的本地环境。
请确保你的电脑上安装了以下软件:
java --version,应显示 version "17.0.x".mvnw (Maven Wrapper),下面的命令会直接用到它。本项目使用了两个数据库,需要分别配置。
platform_db (与配置文件保持一致)。init-mongdb.sql 文件 (注意:虽然文件名带 mongo,但这是给 SQL 用的)。platform_db 中运行该 SQL 文件脚本,创建 users 表。MongoDB 不需要提前建表(它会自动创建),但为了方便可视化,建议手动初始化集合。
rednote。本地启动一个 Redis 服务,默认端口 6379 即可。
Docker 快速启动: docker run -d -p 6379:6379 --name rednote-redis redis
为了安全起见,我们不再直接修改 application-dev.yml 中的密码,而是通过根目录下的 .env 文件注入环境变量。
在项目根目录下创建一个名为 .env 的文件。
复制以下内容并修改为你本地的真实配置:
# --- 数据库配置 --- DB_URL=jdbc:postgresql://localhost:5432/platform_db?currentSchema=public DB_USERNAME=postgres DB_PASSWORD=你的数据库密码 # --- Redis 配置 --- REDIS_HOST=localhost REDIS_PORT=6379 REDIS_PASSWORD= # 如果本地没密码就留空 # --- 阿里云 OSS (开发环境可以使用 Mock 模式) --- # 设置为 false 则开启本地模拟上传,文件存放在项目根目录/uploads下 ALIYUN_OSS_ENABLE=false # 如果设置为 true,则必须填写下面的真实的 Key ALIYUN_ACCESS_KEY_ID= ALIYUN_ACCESS_KEY_SECRET= ALIYUN_BUCKET_NAME= # --- 微信小程序 --- WECHAT_APPID=你的APPID WECHAT_SECRET=你的SECRET # --- 邮件服务 --- MAIL_HOST=smtp.163.com MAIL_USERNAME=你的邮箱@163.com MAIL_PASSWORD=你的授权码 # --- 腾讯云 IM (新增) --- TENCENT_IM_SDK_APPID=你的SDKAppID TENCENT_IM_SECRET_KEY=你的密钥 # --- 内容安全 (新增) --- # 是否开启帖子自动进入审核状态 (true=发帖后状态为0, false=直接发布) POST_AUDIT_ENABLE=false
本项目集成了 Maven Wrapper,不需要你手动配置 Maven 环境变量。
.\mvnw.cmd spring-boot:run
chmod +x mvnw
./mvnw spring-boot:run
看到以下日志即表示启动成功:
Started PlatformApplication in x.xxx seconds
我们在 src/test/java 下编写了多维度的测试用例,帮助你验证环境和业务逻辑。
在 IDEA 中找到对应的测试文件,点击类名旁边的绿色 ▶️ 按钮即可运行。
PostgreSQL 测试: UserTest.java
作用: 测试能否向 users 表插入数据。
成功标志: 输出 写入成功!User ID: xxxxx。
MongoDB 测试: MongoTest.java
作用: 测试能否向 posts 集合写入文档。
成功标志: 输出 写入成功!生成的 ID 为: xxxxx。
Redis 测试: RedisTest.java
4.2 业务逻辑集成测试 (核心推荐)
这些测试模拟了真实的用户请求流程,且使用了 Mock 技术,不依赖外部第三方服务(如微信、OSS),非常适合开发时自测。
API 综合流程测试: controller/ApiIntegrationTest.java
内容: 模拟了“微信登录(Mock) -> 获取Token -> 修改个人资料”的全流程。
特点: 验证最基础的用户鉴权与资料管理,自动回滚数据。
数据一致性测试 (架构核心): DataConsistencyTest.java
内容: 模拟用户在 PostgreSQL 修改昵称/头像后,验证 MongoDB 中的冗余数据(帖子、评论、关注列表)是否通过异步事件正确同步。
特点: 验证混合存储架构中最关键的“最终一致性”机制。
交互闭环测试: controller/InteractionIntegrationTest.java
内容: 模拟用户对帖子进行“点赞 -> 取消点赞 -> 评分”的操作。
特点: 验证 Redis 缓存(去重/计数)与 MongoDB 落库之间的异步配合是否正常。
搜索与分词测试: service/SearchIntegrationTest.java
内容: 验证 Jieba 中文分词是否生效,以及 MongoDB 的全文索引能否正确召回数据。
特点: 确保“搜关键词”能搜到对应的帖子,验证搜索引擎逻辑。
文件上传测试: controller/CommonControllerTest.java
内容: 测试文件上传接口。
特点: 自动使用本地 Mock 模式,文件会生成在 target/test-uploads 目录下,无需配置阿里云账号。
如果上述测试全部通过,说明你的后端环境及核心业务逻辑已经完美就绪!🎉