《Spring Boot 入门》18.3 打包与运行
把图书借阅服务构建、打包并运行起来:给出 mvn clean package 的完整流程与真实构建输出,讲清本地运行的三种方式(java -jar、mvn spring-boot:run、IDE),用 curl 走通从建书、查书、借书、还书到分页查询的完整业务闭环,运行测试套件,分析打包体积与启动时间,最后给出实战卷与高级卷的学习路径和一份全书自查清单。
精选
把图书借阅服务构建、打包并运行起来:给出 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 节的完整索引,每一节都配一句话说明,另含面向排查场景的常见问题速查表,方便按需跳读与随时查阅。
讲迁移的验证与回滚:本机 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 语句的实际影响。
归档