《Spring Boot 实战》目录

《Spring Boot 实战》全书导航页:说明本卷面向已会用 Spring Boot、但没独立交付过生产服务的工程师这一读者定位,给出三条学习路径与一份十周计划,讲清四个部分之间的依赖关系,并按部分列出 18 章 54 节的完整索引,另含生产场景常见问题速查表,每一节都配一句话说明,方便按需跳读与随时查阅。

《Spring Boot 实战》目录

这一页是全书的入口。它不只列出 54 节的标题,还给出三条可以照着走的阅读路径、每一节的一句话说明,以及一张按生产场景索引的常见问题速查表。如果你不确定从哪开始,先读「本书定位」与「读者画像」;如果你已经有明确目标,直接跳到「分部分章节」按编号定位。

全书结构是:正文 18 章 54 节 + 目录 1 篇,共 55 篇。正文按工程交付的推进顺序分为四个部分:先把工程基建搭起来,再做 Web 后端,接着处理数据与集成,最后把服务交付上线。四部分是递进关系,不是并列关系。

如何使用本目录

这一页有三种用法,取决于你此刻的状态。

如果你刚开始读这本书,按顺序读「本书定位」「读者画像」「学习路径」三节,用十分钟决定自己的入口章节。实战卷的内容密度比入门卷高,选错入口的代价也更明显:如果基础注解还没用过,直接读缓存一致性或分布式事务,很容易变成「抄一段配置就走」,遇到线上问题还是不会定位。

如果你已经读到一半,想查某一节在哪,直接看「分部分章节」里对应部分的表格。每一行都有一句话说明,写清了那一节交付什么,可以帮你确认是不是要找的那一节,避免点进去再退出来的反复。

如果你把这本书当手册用,主要会用到两处:「常见问题速查」按生产症状给出简短回答与对应章节;每一节末尾的「小结」则把该节的可落地结论收拢成几条。查问题时先看速查表,定位到章节后再看小结,通常比通读整节更快。

本书定位

这是一本面向已经会用 Spring Boot、但没独立交付过生产服务的工程师的实战书。它的目标不是让你「知道 Spring Boot 有哪些注解」,而是让你能对生产上的工程问题做出有依据的选择——知道该选哪套方案、为什么、代价是什么。

它和入门卷的分工很清楚。入门卷讲「是什么、怎么写」:自动配置怎么生效、Bean 从哪来、怎么定义实体、怎么加 @Transactional。实战卷默认这些你已经会了,不再重复讲解,直接把篇幅留给「生产上怎么选、为什么、代价是什么」。同一个知识点,入门卷回答「它能做什么」,本卷回答「在什么条件下用它、不用它会怎样、用了要付什么代价」。

它有三个刻意的取舍。

第一,重工程决策而非注解清单。本卷几乎每一节都以一个具体场景开头——什么时候该拆模块、连接池该开多大、缓存和数据库怎么保持一致、定时任务在多实例下怎么去重——先给判断依据,再给可落地的配置与代码,最后给踩坑清单。注解的用法是查得到的,决策的依据才是需要练的。

第二,示例围绕同一个「图书借阅服务」演进。从第 5 章的 REST 设计,到第 12 章的事务与锁,再到第 18 章的综合交付,全书尽量用同一个领域模型,让每一节的结论能叠加上去,而不是每节换一个互不相干的例子。

第三,不回避 4.x 的破坏性变更与「没实测就不编」。书中代码以 Spring Boot 4.1.1 + Java 21 为主线,凡 3.x 与 4.x 行为不同之处都两版标注。涉及 Redis、Kafka、Kubernetes 等外部系统的输出一律标注为「示例输出」,不伪称本机实测;性能数字只给量级与测量方法,不编造精确值。

如果你需要的是一份「照着配就能跑」的配置手册,本卷的大部分章节都能当手册查;如果你希望把「能跑」的服务做成「敢上线」的服务,那它的节奏是合适的。

读者画像

不同类型的读者,起点和建议入口差别很大。先在下面找到最接近自己的那一类。

① 读过入门卷、已会用 Spring Boot,但没交付过生产服务的工程师。这是本卷的目标读者。建议按顺序从第 1 章读到第 18 章,不要跳章。第二部分(第 5–10 章,Web 后端工程)与第三部分(第 11–14 章,数据与集成)覆盖面最广,是工程能力的主干。前置要求是:能独立写出增删改查接口、会用 @Transactional、知道 application.yml 与 pom.xml 的写法。

② 正在把手上项目推向生产、遇到具体问题的工程师。你不需要按顺序读,直接从「常见问题速查」或「按痛点跳读」路径切入。连接池、缓存一致性、事务不回滚、多实例定时任务、镜像分层这几类问题在本卷有专门章节,读到对应章节后可以顺着章节末的「小结」补齐相关背景。

③ 想补齐工程能力短板的开发者。你已经能交付功能,但测试、可观测性、部署、性能调优这些「非功能」部分靠经验凑。建议重点读第二部分(第 5–10 章)、第四部分(第 15–18 章),并把第 4 章的测试分层与第 16–17 章的观测与性能当成硬技能来练——它们是「能写代码」与「能负责一个服务」之间的分水岭。

学习路径

下表给出三条典型路径。三条路径不互斥,可以先跳读救急,再回头补齐。

路径适合谁读哪些预计用时
完整通读读过入门卷、想系统性建立生产工程能力第 1 章至第 18 章顺序读,每节动手跑代码9–11 周(每天 1 小时)
按痛点跳读正在交付、手上项目遇到具体问题按问题入口选:11.1、8.3、12.1、13.3、5.3、10.3、6.3、15.1 等2–3 周
交付前速查服务即将上线、需要一份检查清单4.1、15.1、15.2、15.3、16.1、16.2、16.3、17.2、18.31 周

按痛点跳读这条路径的入口不是章节顺序,而是你此刻遇到的问题:连接池告警看 11.1,缓存不一致看 8.3,事务不回滚看 12.1,定时任务重复执行看 13.3,重复下单看 5.3,消息重复消费看 10.3,查询日志刷屏看 6.3,镜像每次重拉依赖看 15.1。每一节都自成闭环,但都会引用相关章节,读完后可以顺着引用补齐。

交付前速查这条路径把「上线」当成一次检查:测试注解口径(4.1)、镜像与部署(15.1–15.3)、观测与告警(16.1–16.3)、压测与容量(17.2)、上线与回滚(18.3)。适合服务已写完、只差交付的场景。

一份可执行的十周计划

上面三条路径偏原则。如果你希望有一份可以直接照着打勾的安排,下面这份十周计划可以作为起点(按每天投入一小时估算),它对应的是「完整通读」路径。

周次主要任务完成标志
第 1 周第 1–2 章:模块拆分、父子 POM、依赖冲突与构建加速能建起多模块工程并定位一次版本冲突
第 2 周第 3–4 章:多环境配置、密钥管理、测试分层与 Testcontainers能搭出分层配置与四层测试体系
第 3 周第 5 章:资源建模、分页过滤排序、幂等与并发控制能设计一套可上生产的写接口
第 4 周第 6–7 章:Repository/DTO、复杂查询、N+1、OpenAPI 与版本能写对查询并维护接口契约
第 5 周第 8–9 章:缓存抽象与一致性、Spring Security、JWT、多租户能给服务加上缓存与鉴权
第 6 周第 10–11 章:@Async、消息队列、可靠投递、连接池、读写分离能处理异步链路与连接池调优
第 7 周第 12–13 章:事务边界、锁、分布式事务、调度与 Batch能正确处理事务与定时任务
第 8 周第 14–15 章:上传下载、对象存储、镜像分层、K8s 部署能把服务容器化部署到集群
第 9 周第 16–17 章:Actuator、链路追踪、日志聚合、性能与 JVM 调优能观测并调优一个在线服务
第 10 周第 18 章:需求与架构、实现与联调、上线与回滚能独立完成一次可上线的交付

这份计划的关键不在于准时,而在于每周都有一个能跑、能测、能部署的产出。实战卷的绝大部分内容是决策与配置,光读记不住;只有把它落到一个真实服务的某一次交付上,判断力才会长出来。

三条路径之外的提醒

第一,先跑通再深究。本卷涉及外部依赖的章节(Redis、Kafka、Kubernetes、对象存储)会明确标注哪些输出是示例输出。如果本机暂时起不了这些依赖,不要卡在这里——先把纯 Spring Boot 的部分跑通,外部依赖的部分读懂配置与取舍即可,等有条件再补实测。

第二,不要一次把 54 节都读完。实战卷知识密度高,连续读太多会变成「读的时候都懂、做的时候想不起来」。更有效的做法是每读完一部分就找一个真实需求练手,把该部分的结论用进去,再进入下一部分。

第三,遇到线上问题先定位再翻书。本卷给出的每个方案都带前提,翻书时先确认自己的场景是否满足前提(数据量、一致性要求、并发量级、实例数),再照搬配置;跳过前提直接抄参数,是这类事故最常见的起点。

第四,把「为什么不用某个方案」也当成收获。本卷在多处给出被否决的方案(比如为什么不该过早分库分表、为什么能不用分布式事务就不用),这些判断和「该用什么」同等重要,建议连同理由一起记住。

版本与示例约定

本卷所有代码以 Spring Boot 4.1.1 + Java 21(Temurin 21.0.12.1) 为基线,构建工具为 Maven 3.9.12。凡 3.5.x 与 4.1.x 行为不同之处,正文会两版分别标注,例如测试注解 @MockBean 在 4.x 已被 @MockitoBean 取代、spring-boot-starter-web 已改名为 spring-boot-starter-webmvc。

涉及 Redis、Kafka、Kubernetes、对象存储等外部系统的运行输出,一律标注为「示例输出」,不伪称本机实测;只有纯 Spring Boot 应用的启动与构建输出才引用本机实测数据。

性能相关章节只给量级与测量方法,不给出未经实测的精确数字。要数字的地方,正文给的是「怎么测出这个数字」的步骤,而不是一个拍脑袋的结果。

四个部分之间的依赖关系

正文按工程交付的推进顺序分为四个部分,它们之间是递进关系:

部分章节回答什么问题依赖谁
第一部分 工程基建第 1–4 章工程怎么搭、依赖怎么管、配置与测试怎么组织无
第二部分 Web 后端工程第 5–10 章对外接口怎么写对、缓存与鉴权怎么加第一部分
第三部分 数据与集成第 11–14 章数据怎么扛住并发、集成怎么保证可靠第一部分、第二部分
第四部分 交付与运行第 15–18 章怎么把它容器化、观测、调优、上线前三部分全部

第二部分与第三部分是全书的地基。Web 后端工程(第 5–10 章)覆盖接口设计、持久化、缓存、安全、异步与消息;数据与集成(第 11–14 章)覆盖连接池、读写分离、事务与锁、调度、文件与对象存储。这两部分合计 10 章 30 节,是本卷的主体,也是「生产工程能力」最集中的地方。如果时间非常有限,优先保证这两部分。

第一部分是入场券,不能跳。第 1–4 章决定的是后面每一节示例能不能在你机器上跑起来、依赖冲突能不能自己排、测试能不能分层。它看起来与业务无关,但缺了它,后面每一节都会变成「照抄配置」。

第四部分必须最后读。第 15–18 章的部署、观测、调优与综合交付会用到前面所有章节的结论;第 18 章的综合实战更是把全书 18 章的内容收敛成一次可上线的交付,单独读会失去上下文。

可以跳读的是第三部分内部的部分章节。如果你手头的服务不涉及分库分表、不涉及大文件与对象存储,第 11.3、14.2、14.3 可以先跳过,遇到场景再回来;但第 11.1、12.1、12.2、13.3 属于几乎所有服务都会碰到的内容,建议不要跳过。

分部分章节

下面按部分列出全部 54 节。每一行都有一句话说明,写清那一节交付什么,用来帮你确认这是不是你要找的那一节。

第一部分:工程基建(第 1–4 章)

这一部分解决「工程怎么搭、依赖怎么管、配置与测试怎么组织」四个前置问题,读完能独立建起一个结构清晰、配置可控、测试分层的多模块工程。

节奏上,这一部分可以快读但不要跳读。第 1 章先把「要不要拆、怎么拆、包怎么分」定下来,这是后面所有章节的骨架。第 2 章处理依赖与构建这两个最容易在团队协作里出问题的地方——版本冲突和构建慢。第 3 章把配置从「一个字符串」拆成正交维度,为多环境与密钥管理立规矩。第 4 章给出测试分层策略,让后面每一节的代码都有地方落测试。

编号章节说明
1.1何时该拆模块给出「单体还是多模块」的可操作判据:哪些信号才该动手拆,以及三种拆分粒度各自要付的代价
1.2父子 POM 与依赖管理把三模块骨架写成能构建的工程,分清 parent 继承与 dependencyManagement 的职责,含子模块声明依赖与发布可复用库的做法
1.3分层与包结构约定把模块边界落到包结构,给出按功能与按层分包的取舍,并用 ArchUnit 把「禁止循环依赖」变成会失败的测试
2.1依赖冲突排查把「运行时才炸」的冲突还原成依赖树路径,给出 exclusions、dependencyManagement、dependency:analyze 三种修复各自的适用边界
2.2版本对齐与 BOM分清 starter-parent 与 spring-boot-dependencies 的差别,用 import scope 的 BOM 把多模块版本收拢到一处并规范地覆盖托管版本
2.3构建加速与缓存先量出构建慢在哪一段,再用跳过无用阶段、增量、并行、依赖预拉、CI 缓存、镜像源六类手段压时间,并说清 4.1 -DskipTests 的语义变化
3.1多环境配置策略把「环境」拆成正交维度,用 profile group 组合激活策略,划清 jar 内基线、外部覆盖、环境变量三层各自的职责
3.2敏感信息与密钥管理看清口令从哪几处漏出,选择环境变量还是挂载文件,划清配置加密与外部密钥管理的边界,并讲密钥轮换对连接池与签名校验的影响
3.3配置中心接入判断什么规模的服务才值得上配置中心、选对组件定位,并给出动态刷新「哪些能刷、哪些刷不动」的边界与降级方案
4.1测试分层策略把单元、切片、集成、端到端四层测试的成本与收益摊开算账,给出可落地的配比与 CI 分层命令,并对齐 4.x 测试注解口径
4.2Testcontainers 真实依赖说清内嵌数据库会掩盖什么,给出 Testcontainers 2.0 与 4.x 的依赖坐标、@ServiceConnection 用法、共享容器策略与 CI 中 Docker 的排查清单
4.3契约测试与数据隔离划清契约测试与集成测试的边界,给出消费者驱动契约的选型与写法,并把数据隔离三策略的代价讲透

第二部分:Web 后端工程(第 5–10 章)

这一部分是全书篇幅最大、也最接近日常交付的部分。它把 Spring Boot 当 Web 框架与后端服务框架用:设计接口、做持久化、加缓存、做安全、处理异步与消息。

节奏上建议慢读,并且围绕同一个「图书借阅服务」把六章串起来。第 5 章定接口形态,第 6 章定数据访问,第 7 章定接口契约,第 8 章加缓存,第 9 章加鉴权,第 10 章把耗时动作异步化、把跨服务动作消息化。六章读完后,你应该能对着一个业务需求,从接口到数据到异步链路给出完整设计。

编号章节说明
5.1资源建模与路由把「图书借阅管理服务」的动作式接口重写成资源式接口,定下 URL 层级、方法与状态码语义,以及批量操作与错误响应的统一约定
5.2分页、过滤与排序把列表接口做成可上生产的分页查询——Page 与 Slice 的取舍、count 查询的代价、keyset 分页、排序字段白名单与分页元信息格式
5.3幂等与并发控制让写接口在超时重试、重复点击、并发提交下不产生重复数据——幂等键三种实现、条件请求与乐观锁的配合、限流与防重各自的分工
6.1Repository 分层与 DTO 转换说清实体为什么不能直接进接口层,给出接口投影与 DTO 投影的选型、转换代码该放哪一层,以及 readOnly 事务与转换时机的配合
6.2复杂查询的三种写法为「图书检索」这类多条件查询选出可维护的写法,讲清派生查询的失效边界、@Query 的 JPQL/native 取舍与 Querydsl 的类型安全动态条件
6.3N+1 与抓取策略看懂 N+1 在 SQL 日志里的形态,给出 JOIN FETCH、@EntityGraph、@BatchSize 的适用与代价,避开分页叠加 fetch join 的陷阱
7.1OpenAPI 与 SpringDoc把 book-loan 服务的接口变成机器可读的 OpenAPI 文档——springdoc 3.x 依赖坐标、注解与推断的边界、多文档分组,以及生产环境该不该开
7.2契约先行与代码生成把 OpenAPI 从「代码的产物」变成「代码的输入」——用 openapi-generator 生成接口与 DTO,划清生成与手写边界,并在 CI 里把契约校验固定下来
7.3版本演进与兼容性给接口定一套版本策略——何时才该引入版本、三种版本载体怎么选、4.x 内置 API Versioning 怎么配,以及用 Deprecation/Sunset 头下线旧版本
8.1Spring Cache 抽象把缓存声明式地加到借阅服务上,讲清注解抽象能表达什么、不能表达什么,哪些活必须落到 CacheManager 甚至 Redis 层面
8.2Redis 缓存实践把 CacheManager 真正落到 Redis——接好 starter、选对序列化与连接方式、定好键命名,并认清大 key 与热 key 两类线上事故的成因与对策
8.3缓存一致性回答「数据变了缓存怎么办」——读写顺序怎么定、延迟双删与 binlog 订阅各自换来什么、三种缓存故障怎么防、何时干脆放弃缓存
9.1Spring Security 配置模型讲清 Security 7.1 的配置模型——为什么是 SecurityFilterChain bean、过滤器链按什么顺序执行、401 与 403 各由谁负责、认证入口怎么落地
9.2JWT 无状态认证判断服务到底该不该上无状态 JWT、选对签名算法、用 JwtDecoder/JwtEncoder 落地签发与校验,并正确处理刷新、轮换与 kid
9.3方法级授权与多租户把授权从 URL 层下沉到方法层,用 @PreAuthorize/@PostAuthorize 表达资源级权限,为借阅服务设计多分馆租户隔离与上下文传播,并给出越权测试写法
10.1@Async 与线程池把「借阅成功后异步发通知」做对——@Async 的代理前提、默认执行器为什么危险、自定义线程池与上下文传递,以及虚拟线程下该怎么选型
10.2消息队列集成把进程内异步升级为跨服务消息投递——Spring Kafka 生产端与消费端配置、位点提交模式与批量消费,并对照 RabbitMQ 说清选型依据
10.3可靠投递与幂等消费回答消息可靠性的三个问题——生产端怎么保证不丢、消费端怎么在重复投递下不出错、失败的消息去哪,给出 acks、去重表、重试与死信的写法

第三部分:数据与集成(第 11–14 章)

这一部分解决「数据怎么扛住并发、集成怎么保证可靠」。它把前面「能用」的数据访问与集成,推到「高并发、多实例、可运维」的程度。

节奏上,第 11–12 章是重点:连接池与事务是绝大多数线上事故的现场。第 13 章讲调度与批处理,第 14 章讲文件与对象存储,这两章的通用性稍低,可以按项目场景取舍,但第 13.3 的分布式调度与幂等建议不要跳过。

编号章节说明
11.1HikariCP 调优掌握 maximum-pool-size 的推导方法、max-lifetime/keepalive-time 与数据库超时的配合、连接泄漏排查,并用 Actuator 指标区分「池不够」与「SQL 慢」
11.2读写分离掌握 AbstractRoutingDataSource 的路由实现与 readOnly 事务路由,理解事务内切换数据源为何无效,并为主从延迟选一套可落地的处理策略
11.3分库分表的接入边界建立「什么时候才该分库分表」的判断力,掌握分片键、跨片查询、分布式主键与 JPA 摩擦这几个必须提前想清的边界
12.1事务边界设计把 @Transactional 的边界画对——该落在哪一层、自调用为何失效、只读事务与超时管什么,以及事务里哪些事绝对不能做
12.2乐观锁与悲观锁为「并发写同一行数据」选出正确的锁策略——乐观锁的失败与重试、悲观锁的写法与代价、加锁顺序对死锁的影响
12.3分布式事务的取舍建立「能不用分布式事务就不用」的判断力,分清 2PC/TCC/Saga/本地消息表各自的边界,并落地本地消息表加轮询补偿
13.1调度方案选型吃透 @Scheduled 的真实语义与坑,再决定要不要上 Quartz 或调度中心,最后用一张表按场景选型
13.2Spring Batch 实战掌握 Job/Step/chunk 模型、chunk 与事务边界的关系、JobRepository 的作用、JobParameters 如何支撑重启,并判断任务值不值得上 Spring Batch
13.3分布式调度与幂等解决 @Scheduled 在多实例部署下的重复执行问题——数据库锁与 Redis 锁两种去重手段、ShedLock 的适用边界,以及让任务「重复跑也安全」的幂等设计
14.1上传下载与大文件把上传图书封面、下载电子附件做成能上生产的接口——multipart 与容器限制、延迟解析、流式读写、文件名安全与下载响应的头信息
14.2对象存储集成把本地落盘换成 S3 兼容的对象存储——用 S3Client 上传下载、用 S3Presigner 签发直传 URL、把密钥与区域配置对、把对象键设计好
14.3断点续传与直传让大文件可续传、可并发、可直传——用 S3 分片上传实现断点续传、用预签名 URL 让客户端绕过应用服务器,并想清直传后谁校验大小与类型

第四部分:交付与运行(第 15–18 章)

这一部分把前面所有内容收拢成一个可以交付、可以观测、可以回滚的服务。它回答的是「代码写完到真正上线之间,还差哪些事」。

节奏上,第 15–16 章是「上线必备」:镜像、部署、健康检查、观测,缺一项上线都会出问题。第 17 章的性能剖析与调优建议在有真实流量或压测数据后再读,效果更好。第 18 章是全书的收尾,把 18 章的内容串成一次完整交付,建议放在最后读。

编号章节说明
15.1镜像构建与分层把 mvn package 的产物变成能按层复用的容器镜像——分层顺序、jarmode=tools 提取、基础镜像与非 root 运行的取舍,附可落地的 Dockerfile 与 .dockerignore
15.2Kubernetes 部署要点从一份可上生产的 Deployment 出发,把资源与 JVM 内存、三种探针、配置注入、无状态与滚动更新这几组「默认值一错就出事」的字段讲透
15.3健康检查与优雅停机把健康端点分组、可用性状态机与容器停机时序串成一条完整链路,让 Pod 在扩缩容与滚动更新时既不早摘流量也不丢在途请求
16.1Actuator 与指标搞清 Actuator 端点的暴露与鉴权策略、Micrometer 的 MeterRegistry 模型,写出可用的业务指标与公共标签,并让 Prometheus 真正算出 P99
16.2链路追踪搭起从入口到数据库、下游 HTTP、消息队列的完整调用链,让每个 span 都带上 traceId,并理解采样率、传播格式与桥接实现的取舍
16.3日志聚合与告警把日志变成可查询的结构化字段,掌握运行时调级、切分保留与脱敏,并建立「指标决定要不要叫人、日志回答为什么」的心智模型
17.1性能剖析方法建立「先测量再优化」的工作流——定义基线指标、区分延迟与吞吐问题,用 JFR、async-profiler、jstack 与 EXPLAIN ANALYZE 把瓶颈钉到具体代码行或 SQL
17.2压测与容量评估把压测变成可信的工程方法——明确目标、设计贴近真实的场景与数据、选对工具、分离压测机与被测机,并用实测 QPS 与安全系数倒推实例数
17.3JVM 参数与运行时调优给出生产环境真正该设的那一小撮 JVM 参数——堆大小与容器感知、OOM 现场、G1 取舍与何时上 ZGC、统一 GC 日志,并用 PrintFlagsFinal 核实默认值
18.1需求与架构把生产级图书借阅服务的功能与非功能需求翻译成一组可评审的架构决策记录,附模块依赖图、需求追溯表、风险清单与容量预算,为后两节立好地基
18.2实现与联调把架构决策落成可运行代码——分层骨架、跨模块契约、并发与异步的关键写法,并给出「本地起全套依赖、跑集成测试、联调前端」的可复现流程
18.3上线、观测与回滚把「能跑的服务」变成「敢上线的服务」——上线检查清单、灰度与分批发布、上线后必看指标、基于 SLO 的告警阈值,以及代码与配置等四类回滚的取舍

常见问题速查

下面这些问题是生产上最常碰到的,先在这里给出简短回答,详细展开在对应章节。回答只给方向,具体参数与代码请到对应章节查。

问题简短回答详见
连接池该开多大?由「并发请求数 ÷ 单请求持有连接的时间」推导,不是越大越好;默认 10 往往偏小,盲目开大反而拖垮数据库11.1
缓存和数据库不一致怎么办?先定读写顺序(通常先写库再删缓存),再用延迟双删或订阅变更兜底;能接受最终一致就别硬上强一致8.3
@Transactional 为什么不回滚?多为同类自调用或 private 方法绕过了代理,或异常被 catch 吞掉、异常类型不在回滚范围12.1
多实例部署后定时任务重复执行?单机 @Scheduled 无协调,需用数据库锁、Redis 锁或 ShedLock 做去重,并让任务本身幂等13.3
镜像为什么每次都要重新拉依赖?分层顺序错了,应先把 pom.xml 拷进去单独跑依赖下载层,再拷源码,让依赖层可复用15.1
压测结果和线上差很多?常见原因是场景不真实、数据量太小、压测机与被测机未分离、指标采集口径不对17.2
依赖冲突怎么快速定位?用 mvn dependency:tree 找到被仲裁掉的版本,再决定用 exclusions 还是 dependencyManagement 收口2.1
列表接口越翻越慢?深分页的 offset 代价,改用 keyset(游标)分页;同时管住排序字段白名单5.2
查询日志里一堆相似 SQL?典型的 N+1,用 JOIN FETCH 或 @EntityGraph 收敛,注意分页叠加 fetch join 的陷阱6.3
接口改了怎么不破坏老客户端?先判定是向后兼容的加法还是破坏性变更;加法直接加,破坏性变更才引入版本并用 Deprecation/Sunset 头下线7.3

读完本卷之后

本卷覆盖的是 Spring Boot 的生产工程主干。读完之后,下面这些方向可以作为下一步。

如果想理解内部机制与迁移,读高级卷。它讲 Spring Framework 7 的容器启动流程、AOP 代理、Web 请求管线、持久化上下文,以及 3.x 到 4.x 的完整迁移路径——本卷只讲到「这么配能跑、为什么这么选」,高级卷回答「框架内部是怎么实现的」。

如果需要查阅专题级深度,站内专题与本书是互补关系:本书是「按交付顺序走一遍」,专题是「按主题深挖」。

小结

这一页给出了全书的地图:55 篇的组织方式、三类读者的入口、三条阅读路径与一份十周计划、四个部分之间的依赖关系,以及 54 节的逐节索引与生产场景速查表。

如果你现在还不确定从哪开始,最稳妥的做法是:从第 1 章第 1 节开始,按顺序读,并且每一节都落到一个能跑、能测、能部署的产出上。实战卷的顺序是设计过的——每一节都假设你读懂了前面那些节,而工程判断力只有在把结论真正用进一次交付之后,才算长在你身上。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「java」更多文章

  1. 《Spring Boot 入门》18.3 打包与运行
  2. 《Spring Boot 入门》18.2 实现
  3. 《Spring Boot 入门》18.1 需求与设计