核心概念
Spring Boot 是基于 Spring 框架的快速开发脚手架,通过 自动配置、起步依赖、嵌入式容器 三大核心特性,将传统 Spring 项目中繁琐的 XML 配置、依赖管理、容器部署等工作简化到极致。
选择 Spring Boot 的核心原因:
- 开箱即用:零配置启动 Web 应用,集成主流中间件只需添加依赖
- 微服务友好:与 Spring Cloud 无缝集成,天然适配微服务架构
- 生产级特性:内置健康检查、监控指标、外部化配置等运维能力
- 社区活跃:版本迭代快,主流技术栈(如 Redis、Kafka)快速集成
原理与关键点
1. 自动配置机制(Auto-Configuration)
传统 Spring 项目需要大量 XML 配置:
<!-- 传统 Spring:手动配置数据源 -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
Spring Boot 自动配置只需两步:
# application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/db
username: root
password: 123456
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
源码关键点:
@SpringBootApplication 是三个注解的组合:
@SpringBootConfiguration:标识配置类@EnableAutoConfiguration:启用自动配置@ComponentScan:扫描当前包及子包的组件
@EnableAutoConfiguration 通过 AutoConfigurationImportSelector 加载 META-INF/spring.factories 中定义的自动配置类:
// spring-boot-autoconfigure.jar
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
...
每个自动配置类使用 @ConditionalOnClass、@ConditionalOnMissingBean 等条件注解,只在特定条件下生效:
@Configuration
@ConditionalOnClass(DataSource.class) // Classpath 存在 DataSource 类时生效
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {
@Bean
@ConditionalOnMissingBean // 用户未自定义 DataSource 时生效
public DataSource dataSource(DataSourceProperties properties) {
return properties.initializeDataSourceBuilder().build();
}
}
2. 起步依赖(Starter Dependencies)
传统项目需要手动管理所有依赖及版本兼容性:
<!-- 传统方式:手动管理多个依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.20</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
<!-- ...还需要 10+ 个依赖 -->
Spring Boot Starter 一站式解决:
<!-- Spring Boot 方式:一个 Starter 包含所有依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
关键价值:
- 避免 JAR 包版本冲突(统一由
spring-boot-dependencies管理) - 降低学习成本(不需要了解每个组件的具体依赖)
- 快速集成中间件(如
spring-boot-starter-data-redis)
3. 嵌入式容器
传统部署需要:
- 打包 WAR
- 下载 Tomcat
- 配置端口、JVM 参数
- 部署 WAR 到 Tomcat
Spring Boot 直接内嵌容器:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args); // 内嵌 Tomcat 启动
}
}
# 打包成可执行 JAR
mvn package
# 直接运行
java -jar app.jar
优势:
- 简化部署(一个 JAR 即可)
- 容器化友好(Docker 镜像更小)
- 微服务标准化(每个服务独立运行)
性能与实践考量
1. 启动速度优化
开发环境关闭不必要的自动配置:
spring:
autoconfigure:
exclude:
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
生产环境使用 延迟初始化:
spring:
main:
lazy-initialization: true # Bean 按需加载,减少启动时间
2. 生产级特性(Actuator)
Spring Boot Actuator 提供开箱即用的监控能力:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
management:
endpoints:
web:
exposure:
include: health,metrics,info # 暴露健康检查、指标端点
关键端点:
/actuator/health:健康检查(K8s 存活探针)/actuator/metrics:JVM、HTTP 请求等指标(对接 Prometheus)/actuator/env:环境变量、配置属性(生产环境需鉴权)
3. 微服务场景
Spring Boot + Spring Cloud 实现微服务标准化:
# 服务注册
spring:
application:
name: order-service
cloud:
nacos:
discovery:
server-addr: localhost:8848
@RestController
@RefreshScope // 动态刷新配置
public class OrderController {
@Value("${order.max-limit}")
private int maxLimit; // 从配置中心读取
}
分布式考量:
- 配置中心:Nacos、Apollo 统一管理配置
- 链路追踪:Sleuth + Zipkin 追踪跨服务调用
- 熔断降级:Sentinel 保护核心服务
面试答题总结
为什么选择 Spring Boot?
- 开发效率提升 10 倍:
- 传统 Spring 项目搭建需要半天(配置 XML、调试依赖冲突)
- Spring Boot 初始化项目只需 5 分钟(Spring Initializr 生成)
- 降低运维复杂度:
- 嵌入式容器:无需单独部署 Tomcat,Docker 镜像更轻量
- 外部化配置:通过环境变量、配置中心动态调整参数
- 微服务架构标配:
- 与 Spring Cloud 无缝集成(服务注册、配置中心、网关)
- 符合云原生标准(健康检查、优雅停机、指标暴露)
- 社区生态强大:
- 官方 Starter 覆盖 90% 常用技术(Redis、Kafka、MongoDB)
- 社区活跃,问题排查资源丰富
核心技术点:
- 自动配置:
@Conditional条件注解 +spring.factoriesSPI 机制 - 起步依赖:统一版本管理,避免 JAR 冲突
- 嵌入式容器:Tomcat/Jetty/Undertow 可切换
适用场景:
- 微服务架构(服务数量多,需要快速迭代)
- 云原生应用(K8s 部署,需要容器化)
- 中小型团队(减少配置工作量,聚焦业务)