Spring Boot
Spring Boot 通过约定大于配置的理念,消除繁琐的 XML 配置和样板代码,让 Spring 应用开箱即用。
核心特性
| 特性 | 说明 |
|---|---|
| 自动配置 | 根据依赖自动配置 Bean |
| 独立运行 | jar 包方式独立运行,内嵌 Tomcat/Jetty |
| Starter | 一组依赖描述,简化依赖管理 |
| Actuator | 准生产级监控端点 |
| 无 XML 配置 | 极简配置方式 |
自动配置原理
自动配置是 Spring Boot 的核心能力,启动时通过 @EnableAutoConfiguration 加载 META-INF/spring.factories(Spring Boot 3 中为 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports)中声明的自动配置类,根据类路径中的依赖自动配置 Bean。
条件注解:自动配置的开关
自动配置类不会无条件生效,每个配置类上都有一组 @ConditionalOnXxx 条件注解,只有条件满足时才创建对应 Bean。这是自动配置"智能"的根源——类路径上有哪个依赖,就装配哪套组件。
| 条件注解 | 判断依据 | 示例 |
|---|---|---|
@ConditionalOnClass / @ConditionalOnMissingClass | 类路径是否存在某类 | 有 DataSource 才装配数据源 |
@ConditionalOnBean / @ConditionalOnMissingBean | 容器是否已有某 Bean | 用户自定义了 Bean 就不再重复创建 |
@ConditionalOnProperty | 配置项是否匹配 | spring.datasource.enabled=true 才生效 |
@ConditionalOnWebApplication | 是否为 Web 应用 | WebFlux/MVC 二选一 |
@ConditionalOnExpression | SpEL 表达式结果 | 复杂组合条件 |
提示
生效顺序与优先级
@ConditionalOnMissingBean 保证用户自定义优先:用户声明的 Bean 已存在时,自动配置不再重复创建——这是"约定大于配置 + 可覆盖"的实现基础。排查"为什么自动配置没生效"时,先看条件注解的判定结果(debug=true 启动可打印条件评估报告)。
@SpringBootApplication
// 等价于
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}提示
@SpringBootApplication 这是一个组合注解,包含 @Configuration、@EnableAutoConfiguration、@ComponentScan 三个注解。
Starter 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>| Starter | 用途 |
|---|---|
| spring-boot-starter-web | Web 应用 |
| spring-boot-starter-data-jpa | JPA 持久化 |
| spring-boot-starter-security | 安全认证 |
| spring-boot-starter-actuator | 应用监控 |
| spring-boot-starter-test | 测试支持 |
配置文件
application.yml
server:
port: 8080
spring:
application:
name: myappProfile 多环境
spring:
profiles:
active: dev启动时指定:java -jar app.jar --spring.profiles.active=prod
配置属性绑定
@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
private String name;
private int timeout;
}Actuator 监控
Actuator 提供生产级监控端点,详见 SpringBootActuator。
management:
endpoints:
web:
exposure:
include: health,info,metrics核心注解速查
| 注解 | 说明 |
|---|---|
@SpringBootApplication | 组合注解,入口注解 |
@Configuration | 声明配置类 |
@EnableAutoConfiguration | 启用自动配置 |
@ComponentScan | 组件扫描 |
@ConfigurationProperties | 绑定配置属性 |
微服务技术选型
Spring Boot + Spring Cloud = 微服务解决方案:
| 场景 | 推荐方案 |
|---|---|
| 注册中心 | Nacos(推荐)、Eureka、Consul |
| 服务调用 | Feign(HTTP)、Dubbo(RPC)、gRPC |
| 配置中心 | Nacos(推荐)、Apollo、Spring Cloud Config |
| 消息队列 | RocketMQ(事务)、Kafka(高吞吐)、RabbitMQ |
| 分布式事务 | Seata AT(推荐)、TCC、MQ 最终一致性 |
| 服务容错 | Sentinel(推荐)、Resilience4j |
| API 网关 | Gateway(推荐)、Zuul |
| 链路追踪 | SkyWalking(推荐)、Zipkin |
注意
版本对应关系 Spring Boot 2.x 对应 Spring Cloud Greenwich ~ Hoxton,Spring Cloud Alibaba 2021.x,使用前务必确认版本兼容性。
注
知识主线
Spring Boot 解决单应用的快速开发,Spring Cloud 在此之上解决服务治理——注册中心、服务调用、网关构成微服务底座,消息队列、分布式事务、服务治理解决分布式复杂性问题。