Spring Boot: Spring Boot 概述与环境准备
Spring Boot 让 Java 企业级开发变得像搭积木一样简单——自动配置、起步依赖、内嵌容器三大特性,彻底告别繁琐的 XML 配置。
1. 你将学到
- Spring Boot vs 传统 Spring 的三大核心特性
- Java 17 LTS 新特性速览(record、sealed class、text block)
- 使用 Spring Initializr 生成项目结构
- IDEA / VS Code 开发环境配置与插件推荐
- Alice 的 OrderFlow 项目背景与课程路线图
2. 一个后端开发者的真实故事
(1) 痛点:XML 配置地狱
Alice 是一名后端开发者,她刚接手了一个传统 Spring MVC 项目——OrderFlow 电商订单管理系统。项目里有超过 20 个 XML 配置文件,光是数据源配置就涉及 5 个文件。每次添加一个新功能,她都要在 3 个 XML 文件之间来回切换,团队新人上手平均需要 2 周。部署时还得单独安装 Tomcat,配置 JNDI 数据源,一个环境问题排查就要花掉半天时间。
(2) Spring Boot 的解法
Spring Boot 用"约定优于配置"的理念,将繁琐的 XML 配置变为零配置启动:
@SpringBootApplication
public class OrderFlowApplication {
public static void main(String[] args) {
SpringApplication.run(OrderFlowApplication.class, args);
}
}
(3) 收益
Alice 用 Spring Boot 重构 OrderFlow 后:XML 配置文件从 20 个降到 0 个,新人上手时间从 2 周缩短到 2 天,部署只需 java -jar 一条命令,内嵌 Tomcat 开箱即用。
3. Spring Boot 核心特性
(1) 三大核心特性
Spring Boot 的核心理念可以用三个关键词概括:自动配置、起步依赖、内嵌容器。
graph LR
A[Spring Boot] --> B[Auto-Configuration<br/>Auto Configuration]
A --> C[Starter Dependencies<br/>Starter Dependencies]
A --> D[Embedded Server<br/>Embedded Server]
B --> B1[Condition-based<br/>Bean Registration]
C --> C1[Opinionated<br/>Dependency Management]
D --> D1[Tomcat / Jetty<br/>/ Undertow]
| 特性 | 传统 Spring | Spring Boot |
|---|---|---|
| 配置方式 | 大量 XML / Java Config | 自动配置 + 少量 YAML |
| 依赖管理 | 手动指定版本,易冲突 | 起步依赖,版本统一管理 |
| 应用服务器 | 外部安装 Tomcat | 内嵌 Tomcat,jar 直接运行 |
| 项目结构 | 需手动配置组件扫描 | @SpringBootApplication 一键启用 |
| 启动方式 | 部署 WAR 到容器 | java -jar 或 mvn spring-boot:run |
(2) Spring Boot 3.x 的新要求
Spring Boot 3.x 是一次重大升级,最低要求 Java 17 和 Jakarta EE 9+。
| 维度 | Spring Boot 2.x | Spring Boot 3.x |
|---|---|---|
| 最低 Java 版本 | Java 8 | Java 17 |
| 命名空间 | javax.* |
jakarta.* |
| Spring Framework | 5.x | 6.x |
| GraalVM 原生镜像 | 实验性 | 官方支持 |
| Observability | Micrometer 基础 | Micrometer + OTel 深度集成 |
javax → jakarta 包名迁移是最重要的破坏性变更,所有 import 语句都需要更新。
4. Java 17 LTS 新特性速览
(1) Record 类
Record 是一种不可变数据载体,自动生成 constructor、getter、equals、hashCode、toString。
▶ 示例: 使用 Record 定义订单 DTO
public record OrderRequest(
Long productId,
Integer quantity,
String customerEmail
) {}
输出:
// 执行成功
(2) Sealed Class
Sealed class 限制哪些类可以继承或实现,增强类型安全。
▶ 示例: 使用 Sealed Class 定义支付状态
public sealed interface PaymentStatus
permits Pending, Completed, Failed {}
public record Pending(String transactionId) implements PaymentStatus {}
public record Completed(String transactionId, LocalDateTime paidAt) implements PaymentStatus {}
public record Failed(String transactionId, String reason) implements PaymentStatus {}
输出:
// 执行成功
(3) Text Block
Text Block 用三引号编写多行字符串,告别转义符号。
▶ 示例: 使用 Text Block 编写 SQL 查询
String query = """
SELECT o.id, o.total_amount, c.email
FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE o.status = 'PENDING'
AND o.created_at < :cutoffTime
ORDER BY o.created_at DESC
""";
输出:
// 执行成功
| 特性 | Java 11 写法 | Java 17 写法 |
|---|---|---|
| 不可变数据 | 手写 Lombok 或 boilerplate | record 一行搞定 |
| 类型层次控制 | 无限制继承 | sealed 限定子类 |
| 多行字符串 | 拼接 + \n |
""" ... """ |
| Switch 表达式 | 语句式 | 表达式式 + 模式匹配预览 |
5. 使用 Spring Initializr 创建项目
(1) Spring Initializr 介绍
Spring Initializr 是官方项目生成器,可通过 Web 界面或 IDE 集成快速创建项目骨架。
▶ 示例: 通过 curl 使用 Spring Initializr
curl https://start.spring.io/starter.zip \
-d type=maven-project \
-d language=java \
-d bootVersion=3.2.5 \
-d groupId=com.orderflow \
-d artifactId=orderflow-service \
-d name=orderflow-service \
-d packageName=com.orderflow \
-d javaVersion=17 \
-d dependencies=web,data-jpa,mysql,validation \
-o orderflow-service.zip
输出:
{"status":"ok","data":{}}
(2) 生成的项目结构
orderflow-service/
├── src/
│ ├── main/
│ │ ├── java/com/orderflow/
│ │ │ └── OrderflowServiceApplication.java
│ │ └── resources/
│ │ ├── application.properties
│ │ ├── static/
│ │ └── templates/
│ └── test/
│ └── java/com/orderflow/
│ └── OrderflowServiceApplicationTests.java
├── pom.xml
└── mvnw / mvnw.cmd
▶ 示例: OrderFlow 的 pom.xml 关键依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.5</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
输出:
// 执行成功
6. 开发环境配置
(1) IDE 选择与插件
| IDE | 推荐插件 | 优势 |
|---|---|---|
| IntelliJ IDEA Ultimate | Spring Boot Plugin / Spring Initializr | 最佳 Spring 支持,一键运行 |
| IntelliJ IDEA Community | Spring Boot Assistant (第三方) | 免费但功能受限 |
| VS Code | Spring Boot Extension Pack | 轻量级,适合前端转后端 |
(2) 必装工具清单
| 工具 | 用途 | 安装验证 |
|---|---|---|
| JDK 17+ | 编译运行 | java -version |
| Maven 3.9+ | 构建工具 | mvn -version |
| Git | 版本控制 | git --version |
| Postman / curl | API 测试 | 发送测试请求 |
▶ 示例: 验证开发环境
# Verify Java version (must be 17+)
java -version
# openjdk version "17.0.9"
# Verify Maven
mvn -version
# Apache Maven 3.9.6
# Verify Git
git --version
# git version 2.43.0
输出:
# 命令执行成功
7. OrderFlow 项目背景与课程路线图
(1) OrderFlow 业务场景
Alice 负责开发的 OrderFlow 是一个电商订单管理微服务系统,核心业务包括:
| 模块 | 功能 | 技术要点 |
|---|---|---|
| 商品管理 | CRUD / 缓存 / 搜索 | JPA + Redis + Caffeine |
| 订单管理 | 下单 / 取消 / 超时自动取消 | 事务 + 定时任务 + 异步 |
| 用户认证 | 注册 / 登录 / 角色权限 | Spring Security + JWT |
| 运维监控 | 健康检查 / 指标 / 链路追踪 | Actuator + Prometheus + Grafana |
(2) 课程路线图
graph LR
P1["Phase 1<br/>入门基础<br/>L01-L06"] --> P2["Phase 2<br/>核心功能<br/>L07-L12"]
P2 --> P3["Phase 3<br/>高级特性<br/>L13-L18"]
P3 --> P4["Phase 4<br/>管理运维<br/>L19-L23"]
P4 --> P5["Phase 5<br/>综合实战<br/>L24-L26"]
8. 综合示例:创建 OrderFlow 项目并验证环境
// OrderflowServiceApplication.java
package com.orderflow;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class OrderflowServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderflowServiceApplication.class, args);
}
}
// controller/HealthController.java
package com.orderflow.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class HealthController {
@GetMapping("/api/health")
public Map<String, Object> health() {
return Map.of(
"status", "UP",
"service", "OrderFlow",
"version", "1.0.0"
);
}
}
$ curl http://localhost:8080/api/health
{"status":"UP","service":"OrderFlow","version":"1.0.0"}
❓ 常见问题
📖 小节
- Spring Boot 三大核心:自动配置、起步依赖、内嵌容器,告别 XML 配置地狱
- Spring Boot 3.x 要求 Java 17+,包名从
javax迁移到jakarta - Java 17 新特性:record(不可变 DTO)、sealed class(限定继承)、text block(多行字符串)
- Spring Initializr 快速生成项目骨架,IDE 集成更方便
- OrderFlow 电商订单管理是贯穿全教程的业务场景
📝 作业
-
基础题(难度⭐):使用 Spring Initializr 创建一个 Spring Boot 3.x 项目,包含
spring-boot-starter-web依赖,运行后访问/api/health返回{"status":"UP"}。 -
进阶题(难度⭐⭐):在项目中定义一个
Productrecord,包含id、name、price字段,创建一个ProductController返回硬编码的商品列表。 -
挑战题(难度⭐⭐⭐):使用 sealed interface 定义
OrderStatus(包含 PENDING、CONFIRMED、SHIPPED、CANCELLED 四个实现),并在 Controller 中根据不同状态返回不同的 HTTP 状态码。