Spring Boot: Spring Boot 概述与环境准备

Spring Boot 让 Java 企业级开发变得像搭积木一样简单——自动配置、起步依赖、内嵌容器三大特性,彻底告别繁琐的 XML 配置。

1. 你将学到


2. 一个后端开发者的真实故事

(1) 痛点:XML 配置地狱

Alice 是一名后端开发者,她刚接手了一个传统 Spring MVC 项目——OrderFlow 电商订单管理系统。项目里有超过 20 个 XML 配置文件,光是数据源配置就涉及 5 个文件。每次添加一个新功能,她都要在 3 个 XML 文件之间来回切换,团队新人上手平均需要 2 周。部署时还得单独安装 Tomcat,配置 JNDI 数据源,一个环境问题排查就要花掉半天时间。

(2) Spring Boot 的解法

Spring Boot 用"约定优于配置"的理念,将繁琐的 XML 配置变为零配置启动:

JAVA
@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 的核心理念可以用三个关键词概括:自动配置、起步依赖、内嵌容器。

100%
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 -jarmvn 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 深度集成
📌 重点: Spring Boot 3.x 的 javax → jakarta 包名迁移是最重要的破坏性变更,所有 import 语句都需要更新。


4. Java 17 LTS 新特性速览

(1) Record 类

Record 是一种不可变数据载体,自动生成 constructor、getter、equals、hashCode、toString。

▶ 示例: 使用 Record 定义订单 DTO

JAVA
public record OrderRequest(
    Long productId,
    Integer quantity,
    String customerEmail
) {}

输出:

TEXT 📖 仅展示
// 执行成功

(2) Sealed Class

Sealed class 限制哪些类可以继承或实现,增强类型安全。

▶ 示例: 使用 Sealed Class 定义支付状态

JAVA
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 {}

输出:

TEXT 📖 仅展示
// 执行成功

(3) Text Block

Text Block 用三引号编写多行字符串,告别转义符号。

▶ 示例: 使用 Text Block 编写 SQL 查询

JAVA
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
    """;

输出:

TEXT 📖 仅展示
// 执行成功
特性 Java 11 写法 Java 17 写法
不可变数据 手写 Lombok 或 boilerplate record 一行搞定
类型层次控制 无限制继承 sealed 限定子类
多行字符串 拼接 + \n """ ... """
Switch 表达式 语句式 表达式式 + 模式匹配预览

5. 使用 Spring Initializr 创建项目

(1) Spring Initializr 介绍

Spring Initializr 是官方项目生成器,可通过 Web 界面或 IDE 集成快速创建项目骨架。

▶ 示例: 通过 curl 使用 Spring Initializr

BASH
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

输出:

TEXT 📖 仅展示
{"status":"ok","data":{}}

(2) 生成的项目结构

TEXT 📖 仅展示
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 关键依赖

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>

输出:

TEXT 📖 仅展示
// 执行成功

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 测试 发送测试请求

▶ 示例: 验证开发环境

BASH
# 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

输出:

TEXT 📖 仅展示
# 命令执行成功

7. OrderFlow 项目背景与课程路线图

(1) OrderFlow 业务场景

Alice 负责开发的 OrderFlow 是一个电商订单管理微服务系统,核心业务包括:

模块 功能 技术要点
商品管理 CRUD / 缓存 / 搜索 JPA + Redis + Caffeine
订单管理 下单 / 取消 / 超时自动取消 事务 + 定时任务 + 异步
用户认证 注册 / 登录 / 角色权限 Spring Security + JWT
运维监控 健康检查 / 指标 / 链路追踪 Actuator + Prometheus + Grafana

(2) 课程路线图

100%
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 项目并验证环境

JAVA
// 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"
        );
    }
}
💻 输出:

TEXT 📖 仅展示
$ curl http://localhost:8080/api/health
{"status":"UP","service":"OrderFlow","version":"1.0.0"}

❓ 常见问题

Q Spring Boot 和 Spring Framework 是什么关系?
A Spring Framework 是基础框架,Spring Boot 是基于 Spring Framework 的快速开发脚手架,提供自动配置、起步依赖和内嵌容器,让你无需手动配置就能快速启动。
Q 必须用 Java 17 吗?Java 11 不行吗?
A Spring Boot 3.x 强制要求 Java 17+,这是 Jakarta EE 9+ 的底线。如果必须用 Java 8/11,只能用 Spring Boot 2.x,但已进入 EOL 周期,不再获得安全更新。
Q Maven 和 Gradle 该选哪个?
A 两者都能用。Maven 生态更成熟、文档更丰富,本教程采用 Maven。Gradle 构建速度更快,适合大型多模块项目。
Q Spring Initializr 生成的项目可以直接用吗?
A 可以直接运行,它已经包含了主启动类和测试类。但你需要根据业务添加依赖和代码,比如 JPA Entity、Controller、Service 等。
Q record 能替代所有 POJO 吗?
A record 适合不可变数据传输对象(DTO)。如果需要 JPA Entity(要求可变和无参构造器),仍然使用普通 class。
Q IDEA Community 版够用吗?
A Community 版缺少 Spring Boot 官方插件,但可通过第三方插件基本使用。如果预算允许,Ultimate 版的 Spring 支持更完善,推荐使用。

📖 小节


📝 作业

  1. 基础题(难度⭐):使用 Spring Initializr 创建一个 Spring Boot 3.x 项目,包含 spring-boot-starter-web 依赖,运行后访问 /api/health 返回 {"status":"UP"}

  2. 进阶题(难度⭐⭐):在项目中定义一个 Product record,包含 idnameprice 字段,创建一个 ProductController 返回硬编码的商品列表。

  3. 挑战题(难度⭐⭐⭐):使用 sealed interface 定义 OrderStatus(包含 PENDING、CONFIRMED、SHIPPED、CANCELLED 四个实现),并在 Controller 中根据不同状态返回不同的 HTTP 状态码。

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏