《Java 编程实战》附录 D 与 Spring Boot 卷的衔接
把 libraryd 的手工装配逐项映射到 Spring Boot 的对应能力:模块与依赖、数据访问、事务、Web 路由、参数校验、错误契约、日志、指标、缓存、测试与打包,并给出从本书代码迁移到 Spring Boot 的顺序与最容易踩错的五个差异点。
tag
把 libraryd 的手工装配逐项映射到 Spring Boot 的对应能力:模块与依赖、数据访问、事务、Web 路由、参数校验、错误契约、日志、指标、缓存、测试与打包,并给出从本书代码迁移到 Spring Boot 的顺序与最容易踩错的五个差异点。
把图书借阅服务构建、打包并运行起来:给出 mvn clean package 的完整流程与真实构建输出,讲清本地运行的三种方式(java -jar、mvn spring-boot:run、IDE),用 curl 走通从建书、查书、借书、还书到分页查询的完整业务闭环,运行测试套件,分析打包体积与启动时间,最后给出实战卷与高级卷的学习路径和一份全书自查清单。
按 18.1 的设计逐层实现图书借阅服务:实体与 Repository(派生查询与 @Query)、Service 事务边界与业务校验、Controller 参数校验与统一响应、全局异常处理,并给出多环境配置组织、Flyway 迁移脚本、实现顺序与每步验证方法,以及三类常见实现偏差。
用一个「图书借阅管理服务」把前 17 章串成完整项目:梳理增删改查、借阅归还、分页查询的用例,设计实体关系、Controller/Service/Repository/DTO 分层与依赖方向,给出接口清单、数据库表结构、Flyway 迁移脚本、错误码与统一响应结构,并列出技术选型与对应章节。
集成测试启动完整 Spring 容器,验证跨层协作。本节讲清 @SpringBootTest 的 webEnvironment 四个取值、4.x 下 TestRestTemplate 需显式开启、上下文缓存与 @DirtiesContext、测试数据隔离的三种策略,并用 Testcontainers 2.0 接入真实数据库,最后给出三层测试的选择速查表。
切片测试只加载需要的那一层,比集成测试快得多。本节用 @WebMvcTest 测 Controller、@DataJpaTest 测 Repository、@JsonTest 测序列化,讲清 4.x 必须显式加 @AutoConfigureMockMvc、用 @MockitoBean 取代旧注解,并给出 3.x 到 4.x 的迁移对照表与新增的 RestTestClient 用法。
单元测试是测试金字塔的底座,也是唯一不需要启动 Spring 容器的测试。本节讲清 JUnit 5 的核心注解与断言,重点演示 Mockito 的 @Mock、when、verify 与 ArgumentCaptor,并说明 4.x 下用 @ExtendWith(MockitoExtension.class) 集成 Mockito 的正确方式,最后为图书服务写出一组单元测试。
日志的价值不在数量而在质量。本节讲清该记什么、不该记什么(密码、令牌、身份证、完整卡号绝不上日志,并给出脱敏示例),如何为事件选对级别,为什么用参数化写法记录异常才不会丢堆栈,占位符 {} 的延迟求值与 isDebugEnabled 的真正用途,异步日志的收益与丢日志风险,并附一份可直接落地的日志规范 checklist。
文本日志检索困难,本节把图书服务日志改成结构化 JSON:用 logback-spring.xml 配合 logstash-logback-encoder 输出字段化日志,讲清 MDC 用法与线程池不传递的陷阱及 TaskDecorator 解法,用 Filter 把请求 ID 写进 MDC 串联一次请求,并对比 logback-spring.xml 与 logback.xml 的差别。
《Spring Boot 高级》全书导航页:说明本卷面向已经能独立交付服务、想理解框架内部机制的读者,给出三条学习路径与一份八周计划,讲清四个部分之间的依赖关系,并按部分列出 11 章 33 节的完整索引,每一节都配一句话说明,另含面向排查场景的常见问题速查表,方便按需跳读与随时查阅。
《Spring Boot 高级》全 34 篇,面向已能独立交付服务、想理解框架内部机制的工程师:从容器启动流程、Bean 定义与依赖解析、自动配置与条件装配、AOP 代理机制讲起,覆盖 MVC 请求管线、WebFlux 与背压、持久化上下文与连接、事务同步与虚拟线程、安全过滤器链与方法级授权,再到 AOT 与原生镜像、可观测性与运行时诊断,最后落到 Spring Boot 3.x 到 4.x 的迁移。本页给出全书分章目录。
讲迁移的验证与回滚:本机 4.1.1 主线与 3.5.16 对照线并行的意义、编译到灰度的分批验证判据、数据格式与 API 契约这类不可回滚的改动、特性开关与双跑降险、回滚演练与工程化护栏,以及反射配置、序列化与时区默认值等最易漏的问题和放弃迁移的判断标准。
把 3.x 到 4.x 的迁移排成有依赖关系的可执行步骤:Java 与构建插件基线、依赖坐标与版本对照、被移除与改名的类与注解、配置属性重命名与移除、spring.factories 到 AutoConfiguration.imports 的沿革,并给出用 unzip 读属性元数据核实的方法。
给出 Spring Boot 4 模块化重构的动因与全貌:从单一 spring-boot-autoconfigure 大 jar 拆成按技术划分的模块、根包与 starter 命名约定、starter 改名对照、Flyway/Liquibase 新增 starter,以及 Jackson 3 与 Jakarta EE 11 基线对依赖声明和 import 语句的实际影响。
本节为图书服务建立生产可用的日志基线:讲清 SLF4J 门面与 Logback 实现的分工,以及为什么不要直接依赖 Log4j2 API;给出六个级别的选择依据与 logging.level.<包名> 的精确控制;解读 4.1.1 的真实启动日志;讲透 logging.file.name 与 path 的差别、轮转配置、4.1 的 Log4j 文件轮转与 logging.group 分组。
系统讲解 Kafka 应用测试策略:测试金字塔中 Kafka 的位置、MockProducer/MockConsumer 单元测试、Embedded Kafka 与 Testcontainers 集成测试对比、Spring Boot @EmbeddedKafka 实战、端到端与契约测试、CI 中的容器编排与性能优化
系统讲解 Spring Batch 批处理:Job/Step/Chunk 编程模型与 JobRepository 元数据表、ItemReader/Processor/Writer 组合、事务边界与提交间隔、重启续跑与失败重试跳过、本地与远程分区并行、Spring Batch 5 的 API 变化,以及生产监控与调优实践。
从 CPU、延迟、内存三个问题域出发,用本机 JDK 21 实测的 jcmd 与 JFR 输出演示 VM.flags、GC.heap_info、Thread.print、GC.class_histogram 的读法,讲清 JFR 记录了什么、线程转储怎么找死锁、堆转储怎么拿与怎么分析,并给出 Arthas 类在线诊断工具的适用边界与风险。
给出生产级图书借阅服务的上线检查清单、金丝雀蓝绿滚动的适用条件、上线后必看的 RED 指标与业务指标、基于 SLO 的错误预算与燃烧率告警定法,以及代码、配置、特性开关、数据四类回滚的取舍,附向前兼容的数据库迁移写法、发布演练要点与事故复盘模板,最后收束全书。
从 Tracer/Span 门面为什么存在讲起,用本机 jar 核实的签名拆解一次 span 的生命周期,说明 ObservationHandler 链如何让一次观察同时产出指标与 span,对比 Brave 与 OpenTelemetry 两种桥接、MDC 日志关联、概率与限速采样的组合,以及 W3C traceparent 与 B3 的报文差异。