Spring Boot 的核心价值在于“约定优于配置”,它并没有改变 Spring 框架的内核,而是通过大量的自动化封装,解决了 Spring 早期“配置地狱”的痛点。
以下梳理的 100 个 Spring Boot 专属知识点(剔除了纯 Spring 框架的内容),按照核心原理、自动配置、Web开发、运维监控、测试、部署与架构的学习路径进行了分类:
🚀 核心原理与启动引导
- SpringApplication 类:Spring Boot 程序的引导入口,负责初始化应用上下文。
- Spring Boot 启动流程:准备环境 -> 创建上下文 -> 刷新上下文 -> 运行 Runner 的完整生命周期。
- Banner 定制:启动时控制台打印的 ASCII 艺术字(
banner.txt)的自定义与关闭。 - SpringApplicationRunListener:监听 Spring Boot 启动各个阶段的 SPI 接口。
- ApplicationRunner 与 CommandLineRunner:应用启动成功后执行特定逻辑的两个接口(参数形式不同)。
- SpringBootServletInitializer:将 Spring Boot 应用打包成 WAR 并在传统 Tomcat 中部署的基类。
- 外置 Tomcat 的排除:如何通过 Maven/Gradle 排除内置 Tomcat,使用外部容器。
- ApplicationContextInitializer:在 Spring 容器刷新之前,对 ConfigurableApplicationContext 进行初始化的回调接口。
- Spring Boot 的类加载器:
LaunchedURLClassLoader,用于支持可执行 JAR 的特殊类加载机制。 - 优雅停机 (Graceful Shutdown):Spring Boot 2.3+ 引入的特性,平滑处理正在进行的请求后再关闭应用。
⚙️ 自动配置 (AutoConfiguration) 核心
- @SpringBootApplication 注解:核心复合注解,包含
@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。 - @EnableAutoConfiguration:开启自动配置的开关,通过
@Import导入自动配置逻辑。 - spring.factories 机制 (2.x):Spring Boot 2.x 中用于加载自动配置类、监听器等的核心 SPI 文件。
- AutoConfiguration.imports (3.x):Spring Boot 3.x 中替代
spring.factories的新加载机制。 - @Conditional 系列注解:自动配置的基石,如
@ConditionalOnClass(类存在时生效)、@ConditionalOnMissingBean(Bean 不存在时生效)。 - @ConditionalOnProperty:根据配置文件中的属性值来决定是否加载某个 Bean。
- @ConditionalOnWebApplication:判断当前是否为 Web 环境(Servlet 或 Reactive)。
- 自动配置报告:启动时通过
--debug参数查看哪些自动配置生效、哪些未生效及原因。 - 排除自动配置:通过
@SpringBootApplication(exclude = ...)禁用特定的自动配置类。 - Spring Boot 的 SPI 扩展机制:如何编写自己的 Starter 并让 Spring Boot 自动识别。
📝 配置管理与属性绑定
- application.properties 与 application.yml:两种主流的配置文件格式及其语法差异。
- 外部化配置优先级:命令行参数 > Java 系统属性 > 操作系统环境变量 > jar 包外配置文件 > jar 包内配置文件的加载顺序。
- @ConfigurationProperties:将配置文件中的属性批量绑定到 Java Bean 中,支持松散绑定(Relaxed Binding)。
- @Value 与 @ConfigurationProperties 的区别:前者适合单个属性注入,后者适合结构化配置且支持 JSR-303 校验。
- Profile 多环境配置:通过
application-dev.yml、application-prod.yml及spring.profiles.active实现环境隔离。 - Profile Group (3.x):Spring Boot 2.4+ 引入的配置组,一次性激活多个 Profile。
- 配置随机数:使用
${random.int}、${random.uuid}在配置文件中生成随机值。 - 配置属性校验:在
@ConfigurationProperties类上使用@Validated和@NotNull等注解进行配置合法性校验。 - YAML 列表与 Map 绑定:如何在 YAML 中定义 List 和 Map 并绑定到 Java 对象。
- Config Data API (2.4+):Spring Boot 2.4 重构后的配置加载机制,替代了旧的
ConfigFileApplicationListener。
🌐 Web 开发专属特性
- 内置 Web 服务器:默认集成 Tomcat,可无缝切换为 Jetty 或 Undertow。
- WebServerFactoryCustomizer:以编程方式定制内置 Web 服务器(如修改端口、线程池)的接口。
- Spring MVC 自动配置:自动配置
ViewResolver、MessageConverter、StaticResource等 MVC 组件。 - HttpMessageConverters:Spring Boot 自动注册的 JSON(Jackson)、XML 等消息转换器。
- 静态资源映射:默认的
/static、/public、/resources路径映射规则及webjars支持。 - Favicon 管理:如何禁用或自定义网站的 Favicon。
- 错误处理自动配置:
BasicErrorController和默认的/error映射,提供统一的错误响应。 - ErrorViewResolver:自定义错误页面的解析逻辑(如 Whitelabel Error Page 的替换)。
- Spring Boot 与 Servlet 3.0+:自动注册
Servlet、Filter、Listener组件(通过@Bean或@ServletComponentScan)。 - WebFlux 自动配置 (响应式):基于 Netty 的响应式 Web 开发栈的自动装配。
- Multipart 文件上传:自动配置文件上传的大小限制(
max-file-size)和临时目录。 - CORS 全局配置:通过
WebMvcConfigurer或@CrossOrigin在 Boot 中的简化使用。 - SSL/HTTPS 配置:在
application.yml中直接配置server.ssl.*开启 HTTPS。 - Server Compression:在配置文件中开启 Gzip 压缩(
server.compression.enabled)。
📦 Starter 依赖与生态整合
- Starter 命名规范:官方
spring-boot-starter-*与第三方*-spring-boot-starter的命名区别。 - spring-boot-starter-parent:继承父 POM 带来的依赖版本管理(Dependency Management)和默认插件配置。
- spring-boot-starter-web:整合 Spring MVC、Tomcat、Jackson 的 Web 开发起步依赖。
- spring-boot-starter-test:整合 JUnit 5、Mockito、AssertJ、Hamcrest 等测试库的起步依赖。
- spring-boot-starter-actuator:提供生产级监控和管理端点的起步依赖。
- spring-boot-starter-aop:整合 Spring AOP 和 AspectJ。
- spring-boot-starter-jdbc / jpa:数据库访问的起步依赖,自动配置数据源。
- spring-boot-starter-data-redis:整合 Redis(Lettuce 或 Jedis 客户端)的起步依赖。
- spring-boot-starter-security:整合 Spring Security,提供默认的安全拦截配置。
- spring-boot-starter-validation:整合 Hibernate Validator,提供参数校验支持。
- spring-boot-devtools:提供开发时热部署(Restart)、LiveReload 等开发体验增强工具。
- Spring Boot 与 Lombok 整合:自动处理注解处理器的配置。
- Spring Boot 3.x 的 Jakarta EE 9+ 迁移:从
javax.*包名全面迁移到jakarta.*。
🩺 运维监控 (Actuator)
- Actuator 端点 (Endpoints):如
/health、/info、/metrics等暴露应用运行状态的接口。 - 端点暴露配置:通过
management.endpoints.web.exposure.include控制哪些端点可以通过 HTTP 访问。 - Health Indicator:内置的数据库、Redis、磁盘等健康检查,以及如何自定义
HealthIndicator。 - Info Contributor:通过
application.yml或 Git 插件自动注入应用版本、提交信息等。 - Metrics 与 Micrometer:Spring Boot 2.x 引入的度量指标门面,支持对接 Prometheus、InfluxDB 等。
- Prometheus 端点:
/actuator/prometheus,提供 Prometheus 格式的监控数据。 - Loggers 端点:运行时动态修改日志级别(如将某个包的日志从 INFO 改为 DEBUG)。
- Beans 端点:查看 Spring 容器中所有 Bean 的依赖关系和别名。
- Conditions Report 端点:
/actuator/conditions,查看自动配置生效情况的详细报告。 - Shutdown 端点:通过 POST 请求
/actuator/shutdown远程关闭应用(需显式开启)。 - Management Port:将监控端点运行在独立的 HTTP 端口(
management.server.port),与业务端口隔离。 - Health Group (2.x):将多个健康检查指标分组(如 liveness 和 readiness),适配 K8s 探针。
🧪 测试增强
- @SpringBootTest:加载完整的 Spring 应用上下文,进行集成测试的核心注解。
- @WebMvcTest:仅加载 Web 层(Controller、Filter 等),用于 Controller 的切片测试。
- @DataJpaTest:仅加载 JPA 相关组件,并自动配置内存数据库,用于 Repository 层测试。
- @MockBean:将 Mockito 模拟对象添加到 Spring 应用上下文中,替换真实的 Bean。
- TestRestTemplate / WebTestClient:Spring Boot 提供的用于集成测试的 HTTP 客户端工具。
- 嵌入式数据库支持:自动检测类路径下的 H2、HSQL、Derby 并配置内存数据库用于测试。
- JsonTest:
@JsonTest注解,用于测试 JSON 序列化与反序列化逻辑。
🚢 打包与部署
- Fat Jar (Executable Jar):Spring Boot 独特的打包方式,将所有依赖打入一个 JAR 包,可直接
java -jar运行。 - spring-boot-maven-plugin:负责打包、重打包(repackage)以及运行 Spring Boot 应用的 Maven 插件。
- Layered Jars (分层打包):Spring Boot 2.3+ 支持的 Docker 镜像优化打包方式,将依赖、资源、应用代码分层,利用 Docker 缓存加速构建。
- Buildpacks 支持:无需 Dockerfile,直接通过
mvn spring-boot:build-image生成符合 OCI 标准的 Docker 镜像。 - Systemd 服务部署:将 Spring Boot 应用作为 Linux Systemd 服务运行(完全可执行 JAR)。
- 远程调试:启动时通过
--debug或 JVM 参数开启远程调试端口。
🔧 高级特性与杂项
- Spring Boot Admin:一个开源的社区项目,提供可视化的 Spring Boot Actuator 管理界面。
- Application Events:Spring Boot 特有的事件,如
ApplicationStartedEvent、ApplicationReadyEvent。 - FailureAnalyzer:启动失败时,提供友好的错误诊断报告(如端口被占用、Bean 定义冲突)。
- Bean 覆盖 (Bean Overriding):Spring Boot 2.1+ 默认禁止同名 Bean 覆盖,需通过配置开启。
- Lazy Initialization:通过
spring.main.lazy-initialization=true开启全局 Bean 懒加载,加速启动。 - AOT (Ahead-of-Time) 编译 (3.x):Spring Boot 3 引入的 AOT 处理,支持 GraalVM Native Image。
- Native Image 支持:将 Spring Boot 应用编译成原生二进制文件,实现毫秒级启动。
- Observability (可观测性 3.x):Spring Boot 3 对 Micrometer Tracing 的自动配置,替代了旧的 Spring Cloud Sleuth。
- RestClient (3.x):Spring Boot 3.2 引入的新一代同步 HTTP 客户端,替代 RestTemplate。
- Problem Details (3.x):自动支持 RFC 9457 标准的错误响应格式。
- Docker Compose 支持 (3.1+):启动应用时自动检测
docker-compose.yml并拉起依赖的容器服务(如 MySQL、Redis)。 - HTTP Interface (声明式 HTTP 客户端):类似 OpenFeign 的声明式 HTTP 调用方式。
- 自动配置的顺序:通过
@AutoConfigureBefore和@AutoConfigureAfter控制自动配置类的加载顺序。 - 配置元数据 (spring-configuration-metadata.json):IDE 提示配置属性(如
server.port)的元数据文件生成。 - 依赖版本仲裁:
spring-boot-dependenciesBOM 统一管理所有第三方库的版本,解决依赖冲突。 - Spring Boot CLI:基于 Groovy 的命令行工具,用于快速编写和运行 Spring Boot 脚本(较少用但属于 Boot 特性)。
- 环境变量绑定规则:将
SERVER_PORT环境变量自动映射到server.port配置项。 - Spring Boot 的版本生命周期:了解 OSS (Open Source Support) 和 Commercial Support 的时间表,及时升级。
这 100 个知识点涵盖了 Spring Boot 从原理到实战的方方面面,掌握这些,你就真正掌握了 Spring Boot 区别于传统 Spring 的核心竞争力。