第 1 课 课程导论 + 项目全景
本课是 30 节课程的起点:先看清「我们要学的是一个什么东西、由哪些部分组成、用到了哪些技术、怎么跑起来」。不写代码,但要建立对整个项目的整体认知。
本课学习目标
完成本课后,你将能够:
- 说清 novel-plus 是什么、有哪几个子系统,各自职责与端口
- 理解多模块工程的组织方式(父工程 + 4 个模块)
- 按层归类整个项目的技术栈,并知道每项技术用在哪
- 把项目跑起来,访问到前台门户和管理后台
一、知识点详解
1.1 项目定位:我们学的到底是什么
novel-plus 是一个多端(PC / WAP)小说阅读与创作平台(原创文学 CMS,Content Management System),不是单机小游戏。它包含小说推荐、作品检索、小说排行、小说阅读、评论、会员中心、作家创作、AI 写作、会员充值订阅、爬虫采集、实时统计报表等完整功能。
- 当前版本:5.3.3
- 技术底座:Spring Boot 3.4.0 + Java 21
- 项目地址(官方):GitHub / Gitee 搜索
201206030/novel-plus,另有学习版novel和微服务版novel-cloud
为什么这个项目值得学? 它是一个把主流后端技术真实组合起来的完整业务系统:有清晰的分层、真实的缓存 / 分表 / 支付 / 爬虫 / AI 场景。吃透它 ≈ 看懂一个中大型 Java 后端项目的通用骨架,之后学其他项目能「举一反三」。
1.2 四个模块:整个项目怎么拆分
整个工程是一个 Maven 多模块项目(根目录 pom.xml 通过 <modules> 聚合),分 4 个模块:
| 模块 | 职责 | 入口类 | 默认端口 |
|---|---|---|---|
novel-common |
通用模块:实体、Mapper、缓存、工具、全局增强 | 无入口(被下面三个依赖) | — |
novel-front |
前台门户 + 作家后台:书城、阅读、评论、会员、作者创作、AI 写作、充值 | novel-front/src/main/java/com/java2nb/novel/FrontNovelApplication.java |
8083 |
novel-crawl |
爬虫管理系统:按规则自动采集、更新小说数据 | novel-crawl/src/main/java/com/java2nb/novel/CrawlNovelApplication.java |
8081 |
novel-admin |
平台管理后台:小说/用户/支付管理、系统 RBAC 权限 | novel-admin/src/main/java/com/java2nb/AdminApplication.java |
80 |
记忆点:前台看书、作家写字、爬虫搬书、后台管书,通用模块打底。
三个启动类都长得像,但注解有差异,这正是理解它们角色的钥匙。 以 FrontNovelApplication.java 为例:
@SpringBootApplication // 声明这是 Spring Boot 应用(自动装配)
@EnableTransactionManagement // 开启声明式事务
@EnableScheduling // 开启定时任务
@EnableCaching // 开启缓存(配合 Redis)
@ServletComponentScan // 扫描 Servlet 组件(过滤器等)
@MapperScan(basePackages = {"com.java2nb.novel.mapper"}) // 扫描 MyBatis Mapper
public class FrontNovelApplication {
public static void main(String[] args) {
SpringApplication.run(FrontNovelApplication.class);
}
}
三个入口类对比:
| 对比项 | front | crawl | admin |
|---|---|---|---|
@EnableTransactionManagement |
✅ | — | ✅ |
@EnableCaching |
✅ | ✅ | ✅ |
@MapperScan 包名 |
com.java2nb.novel.mapper |
com.java2nb.novel.mapper |
com.java2nb.*.dao |
| 是否排除 Spring Security | 否 | 否(crawl 自带 SecurityConfiguration) | ✅ 排除 SecurityAutoConfiguration(改用 Shiro) |
| 启动时行为 | 打印访问地址 | 打印访问地址 | 先创建连接池、打印数据库信息 |
两个值得注意的细节:
- admin 为什么排除 Spring Security? 因为管理后台的鉴权用的是 Apache Shiro(
novel-admin/pom.xml引入 shiro-core/shiro-spring),不是 Spring Security,所以要把 Spring Security 的自动装配关掉,避免冲突。 - Mapper 扫描包名不同:front/crawl 扫描
com.java2nb.novel.mapper,admin 扫描com.java2nb.*.dao。说明管理后台的持久层类放在dao包下(这也是后续读代码时找位置的关键线索)。
1.3 技术栈全景:项目用了哪些东西
按「从底层到上层」分 8 类,一目了然:
| 分类 | 技术 | 用在哪 |
|---|---|---|
| 构建与语言 | Java 21、Maven、Lombok | 全项目(Lombok 简化实体) |
| 数据库 | MySQL 8.0 | 主库,doc/sql/novel_plus.sql 初始化 |
| 持久层 | MyBatis、MyBatis Dynamic SQL、PageHelper、MyBatis Generator | 全项目(动态 SQL + 分页插件) |
| 分库分表 | ShardingSphere-JDBC 5.5.1 | admin 数据源,book_content 按 index_id % 10 分 10 表 |
| 框架 | Spring Boot 3.4 | 全项目 |
| 安全认证 | JJWT(前台登录)、Spring Security(crawl)、Apache Shiro(admin) | 三个模块各司其职 |
| 缓存 | Redis、Redisson | 前台登录态 + 热点数据缓存 |
| 前端 | Thymeleaf、Layui | 模板渲染 + 管理端 UI |
| 业务扩展 | Spring AI 1.0(写作/封面)、alipay-sdk-java(充值)、阿里云 OSS(图片) | 均在 novel-front |
| 运维 | Docker、GitHub Actions CI | 部署与发布 |
这些技术在后续课程中会逐一展开:MyBatis/分页/分表(L6-L10)、Spring Boot(L11-L15)、JWT/Spring Security/Shiro(L16-L18)、业务实战(L19-L24)、Spring AI/异步(L25-L26)。
1.4 怎么跑起来:前置环境与启动顺序
前置要求:
- JDK 21(项目要求
java.version=21,低于此版本无法编译) - Maven(3.x)+ 本地仓库能访问阿里镜像(
pom.xml里已配好 aliyun 仓库) - MySQL 8.x、Redis(启动前台登录态/缓存需要)
初始化数据库:
- 用
doc/sql/novel_plus.sql建库建表(主脚本,库名novel_plus) - 若需要最新结构,按文件名时间顺序执行
doc/sql/下的增量脚本(如20250712.sql)
启动顺序(建议):
- 启动 MySQL、Redis
- 依次启动
novel-front(8083)、novel-crawl(8081)、novel-admin(80)
访问入口:
- 前台门户:
http://localhost:8083 - 爬虫管理:
http://localhost:8081(账号 admin / admin,见 crawl 的application.yml) - 管理后台:
http://localhost:80
各模块端口在各自
application.yml的server.port配置;novel-front默认激活dev环境并引入website,alipay,oss三个 profile(application.yml第 4-7 行)。
1.5 学习文档索引:已有资源别浪费
| 文档 | 类型 | 什么时候用 |
|---|---|---|
doc/novel-plus-tutorial.md |
源码级教程(11 章) | 环境搭建、数据库、模块详解、核心流程 |
doc/novel-plus-source-study.md |
源码学习笔记(阶段 0-3) | 深入读源码、二次开发 |
doc/tech-stack-learning-roadmap.md |
技术栈学习路线图 | 补某项技术的基础 |
Tutorial/学习建议-二次开发路线.md |
学习路径与练习 | 总体节奏、动手练习 P0-P5 |
Tutorial/课程大纲-30节课.md |
课程大纲 | 每课主题与参考章节 |
doc/AI功能无反应诊断.md |
排障记录 | AI 功能出问题时的排查参考 |
1.6 安全提醒
novel-front 的 application.yml 里直接写着真实可用的 API Key(如 Spring AI 调用的 deepseek key)。学习时注意:
- 不要把这个仓库推到公开仓库,或推之前务必把 key 清掉 / 换成你自己的
- 即便只在本地学,也建议换成自己的 key,避免被盗用产生费用
- 学配置时看「key 配在哪里、什么格式」,不要传播原文
二、动手练习(含验证标准)
建议跟着做,做完一项勾一项。这是检验「看懂了」最直接的方式。
练习 1:把项目跑起来
- 目标:完成数据库初始化和三模块启动,能访问到前台和管理后台。
- 步骤:安装 JDK21/Maven/MySQL/Redis → 用
doc/sql/novel_plus.sql建库 → 依次启动三个模块。 - 验证标准:浏览器访问
http://localhost:8083能看到前台首页数据;访问http://localhost:80能打开管理后台登录页;三个模块控制台都出现「项目启动啦」日志。
练习 2:结构认知
- 目标:在 IDEA 里展开四个模块,形成「哪里是什么」的直觉。
- 步骤:用 IDE 打开根目录
pom.xml(会作为 Maven 工程加载),展开novel-common / novel-front / novel-crawl / novel-admin,每个模块找 2-3 个核心类(如 front 下的PageController、admin 下的sys目录)。 - 验证标准:能不看文档说出每个模块的职责,并指出其中 1-2 个核心类的包路径。
练习 3:配置观察
- 目标:自己找到端口、环境、数据源配置,建立「配置在哪」的认知。
- 步骤:打开
novel-front/src/main/resources/application.yml,找到server.port与spring.profiles.active;打开novel-admin/src/main/resources/application.yml,找到数据源(ShardingSphereDriver)指向的文件。 - 验证标准:能回答「front 端口是多少、激活了什么环境」「admin 的数据源配置文件路径是什么」。
三、本课小结
novel-plus 是一个 Spring Boot 3.4 / Java 21 的多模块小说 CMS:前台看书(front,8083)、作家写字(front)、爬虫搬书(crawl,8081)、后台管书(admin,80),通用模块(common)打底。它把 MyBatis、分页、分表、JWT/Shiro、Redis、Spring AI、支付宝、Docker 等主流技术真实地组合在一起,是一个极佳的大型后端工程学习范本。下一课起,我们从 Java 21 与工程工具开始打基础,逐步深入到数据库、框架、业务与部署。
四、自测题
- 【选择】novel-front 的默认端口是?(A. 80 B. 8081 C. 8083 D. 8080)
- 【选择】哪个模块排除了 Spring Security 自动装配、改用 Shiro 鉴权?(A. front B. crawl C. admin D. common)
- 【选择】front / crawl 的
@MapperScan扫描哪个包?(A.com.java2nb.*.daoB.com.java2nb.novel.mapperC.com.java2nb.novel.entityD.com.java2nb) - 【简答】分别用一句话说出四个模块各负责什么。
- 【简答】为什么启动前必须先初始化数据库?admin 模块的数据源指向哪个配置文件?
答案在文内对应章节:端口见 1.2 表、Shiro 见 1.2 细节说明、MapperScan 见 1.2 对比表、模块职责见 1.2 表、数据源见练习 3。
五、参考资源
- 本课程大纲:
Tutorial/课程大纲-30节课.md→ 第 1 课 - 教程:
doc/novel-plus-tutorial.md→ 第 1、2 章(项目概述、环境搭建与运行) - 源码笔记:
doc/novel-plus-source-study.md→ 阶段 0(项目认知与跑通) - 技术栈路线:
doc/tech-stack-learning-roadmap.md→ 第 2.1-2.3 节(Java/Maven/Lombok) - 项目首页:根目录
README.md