本项目是一个基于Spring Boot和Spring Cloud的微服务架构小说阅读器系统,提供用户管理、图书管理、书架管理等核心功能。采用前后端分离设计,通过API网关统一对外提供服务。
- Java版本: Java 8 (1.8)
- 构建工具: Maven 3.x
- 主框架: Spring Boot 2.3.12.RELEASE
- 微服务框架: Spring Cloud Hoxton.SR12
- Web框架: Spring Web MVC / Spring WebFlux (Gateway)
- 数据库: MySQL 5.7+
- ORM框架: MyBatis-Plus 3.4.3
- 连接池: Alibaba Druid 1.2.8
- 数据库驱动: MySQL Connector/J
- 缓存: Redis (spring-boot-starter-data-redis)
- JWT令牌: JJWT 0.9.1
- 安全框架: Spring Security
- 密码加密: BCryptPasswordEncoder
- Swagger: SpringFox Boot Starter 3.0.0
- Lombok: 简化Java代码
- Commons IO: Apache Commons IO 2.11.0
- AOP: Spring AOP (用于切面编程)
- 单元测试: JUnit 5 (Jupiter)
- 集成测试: Spring Boot Test
novel-reader/ # 父项目
├── novel-common/ # 公共模块
├── novel-user/ # 用户服务
├── novel-book/ # 图书服务
├── novel-bookshelf/ # 书架服务
└── novel-gateway/ # 网关服务
- 网关服务: 8088
- 用户服务: 8081
- 图书服务: 8082
- 书架服务: 8083
┌─────────────┐
│ Client │
└──────┬──────┘
│
┌──────▼──────┐
│ Gateway │ ← 8088
│ (JWT Filter)│
└──┬───┬───┬─┘
│ │ │
┌────────────┘ │ └────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ User Service│ │ Book Service│ │Bookshelf Svc│
│ :8081 │ │ :8082 │ │ :8083 │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
└────────────────┼────────────────┘
│
┌──────▼──────┐
│ MySQL │
│ + Redis │
└─────────────┘
职责: 提供通用组件和共享资源
核心内容:
- 实体类: User, Book, Chapter, Bookshelf
- 工具类:
JwtUtil: JWT令牌生成与验证PasswordEncoderUtil: 密码加密工具UserContext: 用户上下文管理
- 配置类:
MybatisPlusConfig: MyBatis-Plus分页和乐观锁配置RedisConfig: Redis配置
- 注解与切面:
@AuthToken: 自定义认证注解AuthTokenAspect: 认证切面处理
- 结果封装:
Result: 统一响应结果ResultCode: 响应状态码
- 解析器接口:
BookParser(图书内容解析抽象)
职责: 用户注册、登录、信息管理
核心功能:
- 用户注册
- 用户登录(JWT认证)
- 用户信息查询与更新
- 用户权限管理
技术实现:
- Controller:
UserController - Service:
UserService - Mapper:
UserMapper - DTO:
LoginRequest,RegisterRequest,UpdateUserRequest - 安全配置:
SecurityConfig
职责: 图书上传、解析、章节管理
核心功能:
- 图书文件上传(支持TXT格式)
- 图书内容自动解析
- 章节拆分与管理
- 图书搜索与列表查询
- 图书详情查看
技术实现:
- Controller:
BookController - Service:
BookService - Mapper:
BookMapper,ChapterMapper - 解析器:
BookParserFactory: 解析器工厂TxtBookParser: TXT格式解析器
- 安全配置:
SecurityConfig
职责: 用户书架管理、阅读进度跟踪
核心功能:
- 添加图书到书架
- 从书架移除图书
- 查询用户书架列表
- 更新阅读进度
- 记录最后阅读章节
技术实现:
- Controller:
BookshelfController - Service:
BookshelfService - Mapper:
BookshelfMapper - 安全配置:
SecurityConfig
职责: 路由转发、JWT认证、请求过滤
核心功能:
- 统一入口路由
- JWT令牌验证
- 跨域处理
- 负载均衡(可扩展)
技术实现:
- 过滤器:
JwtAuthenticationFilter - 路由配置:
application.yml中定义 - 基于Spring Cloud Gateway (Reactive)
- 名称: novel_reader
- 字符集: utf8mb4
- 排序规则: utf8mb4_unicode_ci
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT | 主键,自增 |
| username | VARCHAR(50) | 用户名,唯一 |
| password | VARCHAR(100) | BCrypt加密密码 |
| VARCHAR(100) | 邮箱 | |
| nickname | VARCHAR(50) | 昵称 |
| avatar | VARCHAR(255) | 头像URL |
| status | TINYINT | 状态:1正常,0禁用 |
| deleted | TINYINT | 逻辑删除标记 |
| create_time | DATETIME | 创建时间 |
| update_time | DATETIME | 更新时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT | 主键,自增 |
| book_name | VARCHAR(255) | 书名 |
| author | VARCHAR(100) | 作者 |
| description | TEXT | 简介 |
| cover_image | VARCHAR(500) | 封面图片 |
| upload_user_id | BIGINT | 上传用户ID |
| chapter_count | INT | 总章节数 |
| total_word_count | INT | 总字数 |
| file_size | BIGINT | 文件大小(字节) |
| status | TINYINT | 状态:1正常,0下架 |
| deleted | TINYINT | 逻辑删除标记 |
| create_time | DATETIME | 创建时间 |
| update_time | DATETIME | 更新时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT | 主键,自增 |
| book_id | BIGINT | 所属图书ID(外键) |
| chapter_num | INT | 章节序号 |
| chapter_title | VARCHAR(255) | 章节标题 |
| content | LONGTEXT | 章节内容 |
| word_count | INT | 章节字数 |
| content_size | BIGINT | 内容字节数 |
| status | TINYINT | 状态 |
| deleted | TINYINT | 逻辑删除标记 |
| create_time | DATETIME | 创建时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT | 主键,自增 |
| user_id | BIGINT | 用户ID |
| book_id | BIGINT | 图书ID |
| last_read_chapter | INT | 最后阅读章节 |
| read_progress | INT | 阅读进度百分比 |
| read_time | DATETIME | 最后阅读时间 |
| deleted | TINYINT | 逻辑删除标记 |
| create_time | DATETIME | 加入时间 |
- 逻辑删除: 所有表都包含
deleted字段,使用MyBatis-Plus的@TableLogic注解 - 自动填充:
create_time和update_time使用MyBatis-Plus的FieldFill自动填充 - 索引优化: 为常用查询字段建立索引
- 外键约束: 章节表对图书表有外键约束,级联删除
1. 用户登录 → 验证用户名密码 → 生成JWT Token
2. 客户端请求 → 携带Token → Gateway验证
3. Gateway → 提取用户信息 → 转发到微服务
4. 微服务 → @AuthToken注解 → 切面验证权限
- 密钥: novel-reader-secret-key-2024 (可配置)
- 有效期: 86400000ms (24小时,可配置)
- 算法: HS512
- 载荷: userId, username, subject, iat, exp
- 使用BCrypt强哈希算法
- 盐值随机生成
- 不可逆加密
- 基于
@AuthToken注解的方法级权限控制 - AOP切面拦截验证
- 用户上下文传递 (
UserContext)
- 分页插件: 支持MySQL分页,最大限制500条
- 乐观锁: 防止并发更新冲突
- 逻辑删除: 自动处理软删除
- 自动填充: 时间字段自动填充
- BaseMapper: 通用CRUD操作
- 策略模式:
BookParser接口定义解析规范 - 工厂模式:
BookParserFactory根据文件类型选择解析器 - 当前支持: TXT格式解析 (
TxtBookParser) - 扩展性: 可轻松添加EPUB、PDF等格式解析器
{
"code": 200,
"message": "success",
"data": {}
}- 全局异常处理器(待完善)
- 统一错误码定义
- 友好的错误提示
┌─────────────────────────────────────┐
│ Developer Machine │
├─────────────────────────────────────┤
│ Gateway :8088 │
│ User :8081 │
│ Book :8082 │
│ BookShelf:8083 │
│ MySQL :3306 │
│ Redis :6379 │
└─────────────────────────────────────┘
- 服务注册发现: 集成Nacos或Eureka
- 配置中心: 使用Nacos Config或Spring Cloud Config
- 负载均衡: Spring Cloud LoadBalancer
- 熔断降级: 集成Resilience4j或Sentinel
- 链路追踪: 集成Sleuth + Zipkin
- 容器化: Docker + Kubernetes
- CI/CD: Jenkins或GitLab CI
- 微服务架构: 模块解耦,独立部署,易于扩展
- 统一网关: 集中认证、路由、限流
- JWT无状态认证: 适合分布式系统
- MyBatis-Plus: 简化数据访问层开发
- 逻辑删除: 数据安全,可恢复
- RESTful API: 标准化接口设计
- Swagger文档: 自动生成API文档
- 智能解析: 自动识别章节,拆分内容
- 阅读进度: 精确记录用户阅读位置
- 书架管理: 个性化图书收藏
- 多格式支持: 预留扩展接口(目前支持TXT)
- 全局异常处理器
- 参数校验增强
- 接口限流机制
- 日志统一管理
- 文件上传大小限制
- 图片压缩与存储优化
- 支持EPUB/PDF格式
- 图书搜索功能(Elasticsearch)
- 阅读统计与分析
- 评论与评分系统
- 推荐算法
- 消息通知
- 移动端APP
- 在线阅读器前端
- 付费章节功能
- 作者后台系统
- 版权保护机制
- 分布式文件系统(MinIO/OSS)
- 遵循阿里巴巴Java开发手册
- 使用Lombok简化代码
- 统一异常处理
- 合理的注释规范
- RESTful风格
- 统一响应格式
- HTTP状态码规范使用
- 版本控制(URL中包含版本号)
- 表名小写,下划线分隔
- 必须包含主键、创建时间、更新时间
- 合理使用索引
- 避免大事务
| 技术 | 选型理由 |
|---|---|
| Spring Boot | 快速开发,约定优于配置,生态丰富 |
| Spring Cloud | 成熟的微服务解决方案 |
| MyBatis-Plus | 简化MyBatis,提供强大CRUD功能 |
| Druid | 高性能连接池,监控功能强大 |
| JWT | 无状态,适合微服务认证 |
| Redis | 高性能缓存,支持多种数据结构 |
| Swagger | 自动生成API文档,方便调试 |
| Lombok | 减少样板代码,提高开发效率 |
本项目采用主流的微服务技术栈,具有良好的可扩展性和维护性。通过合理的模块划分和技术选型,实现了用户管理、图书管理、书架管理等核心功能。后续可根据业务需求逐步完善功能,提升系统性能和用户体验。
-
✅ 自动元数据提取: 从TXT文件中自动识别书名、作者、简介
- 支持格式:
书名 作者:xxx或作者: xxx - 支持多种简介关键词:
内容简介、简介、内容提要、故事梗概 - 优先级: 文件提取 > 用户输入 > 默认值
- 支持格式:
-
✅ 智能编码检测: 自动识别文件编码
- 支持 UTF-8、GBK、UTF-16LE、UTF-16BE
- 通过BOM头和内容特征双重检测
- 解决中文乱码问题
-
✅ 章节解析优化
- 支持多种章节格式:
第X章、第X节、第X卷等 - chapter_title 只存储标题部分(如"山边小村"),不包含前缀
- 修复大文件内容丢失问题
- 字节流回退机制确保完整读取
- 支持多种章节格式:
- ✅ 新增更新接口:
POST /book/update- 支持更新书名、作者、简介
- 权限控制:仅上传者可修改
- 选择性更新:只更新提供的字段
- 自动清除缓存
- ✅ 上传/更新/删除图书后自动清除列表缓存
- ✅ 确保Redis与MySQL数据一致
- ✅ 新增
clearBookListCache()方法统一管理缓存清除
- ✅ 修复 LocalDateTime 序列化问题(添加 JavaTimeModule)
- ✅ 修复 PushbackInputStream 缓冲区溢出(扩容至8192字节)
- ✅ 修复 Java 8 兼容性问题(移除 readAllBytes())
- ✅ 提升上传限制至 200MB
- ✅ 修复章节内容为空的问题
- ✅ 修复书籍简介未保存的问题
- ✅ 网关JWT验证增强(使用JJWT库真正验证签名)
- ✅ AuthToken切面支持从Authorization Header解析Token
- ✅ 支持Postman等工具直接测试(无需浏览器插件)
- ✅ 添加详细的元数据提取日志
- ✅ 添加编码检测日志
- ✅ 添加章节解析进度日志
- ✅ 添加缓存清除日志
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Swagger无法发送Token | ModHeader无法拦截AJAX请求 | 使用Postman测试或通过网关访问 |
| Gateway不支持Swagger | WebFlux与SpringFox不兼容 | 提供静态HTML导航页面 |
| 章节内容为空 | 字节流未回退 | 使用PushbackInputStream.unread() |
| Redis数据不一致 | 缓存未及时清除 | 写操作后调用clearBookListCache() |
| 中文乱码 | 编码检测不准确 | 增强编码检测逻辑 |
文档版本: v2.0
更新日期: 2026-05-06
维护者: 开发团队