软件工程课程大作业 - 下午第三组
这是一个基于 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
系统采用典型的分层架构,并预留了 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/预留)]
Auth 模块: 处理微信一键登录、账号注册、邮件验证码、JWT 签发。 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。db.createCollection("posts")
db.createCollection("comments")
db.createCollection("post_likes")
db.createCollection("post_collects")
db.createCollection("user_follows")
本地启动一个 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=你的授权码
本项目集成了 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
这些测试模拟了真实的用户请求流程,且使用了 Mock 技术,不依赖外部第三方服务(如微信、OSS),非常适合开发时自测。
API 综合测试: controller/ApiIntegrationTest.java
内容: 模拟了“微信登录(Mock) -> 获取Token -> 修改个人资料”的全流程。
特点: 会自动回滚数据库,不会产生脏数据。
文件上传测试: controller/CommonControllerTest.java
内容: 测试文件上传接口。
特点: 自动使用本地 Mock 模式,文件会生成在 target/test-uploads 目录下,无需配置阿里云账号。
如果上述测试全部通过,说明你的后端环境及核心业务逻辑已经完美就绪!🎉