1. 引言
Spring Boot 是当前 Java 后端开发中最主流的框架之一。它基于 Spring Framework 构建,通过「约定优于配置」的理念,大幅降低 Spring 项目的搭建与开发成本。本文面向有 Java 基础但未接触过 Spring Boot 的开发者,从零开始完成开发环境准备,并跑通第一个 REST 接口。
2. Spring Boot 是什么
Spring Boot 并不是一个全新的框架,而是对 Spring Framework 的进一步封装与增强。它解决了传统 Spring 项目配置繁琐、依赖管理复杂、部署困难等问题。
2.1 与 Spring Framework 的区别
| 维度 | Spring Framework | Spring Boot |
|---|---|---|
| 配置方式 | 大量 XML 或 Java 配置 | 自动配置(Auto Configuration) |
| 依赖管理 | 手动管理版本 | 起步依赖(Starter)统一管理 |
| 部署方式 | 需部署到外部容器(如 Tomcat) | 内嵌容器,可独立运行 |
| 项目搭建 | 手动创建并配置 | Spring Initializr 一键生成 |
2.2 互补关系
Spring Boot 并没有替代 Spring Framework,而是建立在 Spring Framework 之上。Spring Framework 提供核心能力(IoC 容器、AOP、事务管理等),Spring Boot 则负责简化这些能力的装配与使用。你可以把 Spring Framework 理解为「引擎」,Spring Boot 则是「一键启动的整车」。
下面用一张图概括 Spring Framework 与 Spring Boot 的关系:
#mermaid-svg-2htx2AAt9QUEkgl5{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2htx2AAt9QUEkgl5 .error-icon{fill:#552222;}#mermaid-svg-2htx2AAt9QUEkgl5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2htx2AAt9QUEkgl5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2htx2AAt9QUEkgl5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2htx2AAt9QUEkgl5 .marker.cross{stroke:#333333;}#mermaid-svg-2htx2AAt9QUEkgl5 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2htx2AAt9QUEkgl5 p{margin:0;}#mermaid-svg-2htx2AAt9QUEkgl5 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2htx2AAt9QUEkgl5 .cluster-label text{fill:#333;}#mermaid-svg-2htx2AAt9QUEkgl5 .cluster-label span{color:#333;}#mermaid-svg-2htx2AAt9QUEkgl5 .cluster-label span p{background-color:transparent;}#mermaid-svg-2htx2AAt9QUEkgl5 .label text,#mermaid-svg-2htx2AAt9QUEkgl5 span{fill:#333;color:#333;}#mermaid-svg-2htx2AAt9QUEkgl5 .node rect,#mermaid-svg-2htx2AAt9QUEkgl5 .node circle,#mermaid-svg-2htx2AAt9QUEkgl5 .node ellipse,#mermaid-svg-2htx2AAt9QUEkgl5 .node polygon,#mermaid-svg-2htx2AAt9QUEkgl5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2htx2AAt9QUEkgl5 .rough-node .label text,#mermaid-svg-2htx2AAt9QUEkgl5 .node .label text,#mermaid-svg-2htx2AAt9QUEkgl5 .image-shape .label,#mermaid-svg-2htx2AAt9QUEkgl5 .icon-shape .label{text-anchor:middle;}#mermaid-svg-2htx2AAt9QUEkgl5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2htx2AAt9QUEkgl5 .rough-node .label,#mermaid-svg-2htx2AAt9QUEkgl5 .node .label,#mermaid-svg-2htx2AAt9QUEkgl5 .image-shape .label,#mermaid-svg-2htx2AAt9QUEkgl5 .icon-shape .label{text-align:center;}#mermaid-svg-2htx2AAt9QUEkgl5 .node.clickable{cursor:pointer;}#mermaid-svg-2htx2AAt9QUEkgl5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2htx2AAt9QUEkgl5 .arrowheadPath{fill:#333333;}#mermaid-svg-2htx2AAt9QUEkgl5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2htx2AAt9QUEkgl5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2htx2AAt9QUEkgl5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2htx2AAt9QUEkgl5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2htx2AAt9QUEkgl5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2htx2AAt9QUEkgl5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2htx2AAt9QUEkgl5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2htx2AAt9QUEkgl5 .cluster text{fill:#333;}#mermaid-svg-2htx2AAt9QUEkgl5 .cluster span{color:#333;}#mermaid-svg-2htx2AAt9QUEkgl5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2htx2AAt9QUEkgl5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2htx2AAt9QUEkgl5 rect.text{fill:none;stroke-width:0;}#mermaid-svg-2htx2AAt9QUEkgl5 .icon-shape,#mermaid-svg-2htx2AAt9QUEkgl5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2htx2AAt9QUEkgl5 .icon-shape p,#mermaid-svg-2htx2AAt9QUEkgl5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2htx2AAt9QUEkgl5 .icon-shape .label rect,#mermaid-svg-2htx2AAt9QUEkgl5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2htx2AAt9QUEkgl5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2htx2AAt9QUEkgl5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2htx2AAt9QUEkgl5 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 提供核心能力
提供核心能力
提供核心能力
封装与简化
自动配置
内嵌容器
Spring Framework
IoC 容器
AOP
事务管理
Spring Boot
起步依赖 Starter
独立运行
3. 版本选择指南
版本选择是新手最容易困惑的地方。这里给出明确的对应关系:
| JDK 版本 | Spring Boot 版本 | 说明 |
|---|---|---|
| JDK 17 | Spring Boot 3.0.x ~ 3.3.x | 推荐组合,长期支持 |
| JDK 21 | Spring Boot 3.2.x ~ 3.3.x | 新特性更多,适合新项目 |
3.1 推荐组合
本文推荐使用 JDK 17 + Spring Boot 3.3.x。原因如下:
- JDK 17 是长期支持版本(LTS),稳定且生态成熟;
- Spring Boot 3.3.x 是当前 3.x 系列中较新的稳定版本;
- 两者组合在社区中资料丰富,遇到问题容易检索到解决方案。
注意:Spring Boot 3.x 要求 JDK 17 及以上,不再支持 JDK 8/11。如果你还在用旧版本 JDK,需要先升级。
4. 开发环境准备
4.1 安装 JDK 17
以 macOS 为例,使用 Homebrew 安装:
bash
brew install openjdk@17
Windows 用户可前往 Adoptium 下载 JDK 17 安装包,安装后配置 JAVA_HOME 环境变量。
验证安装:
bash
java -version
输出类似:
openjdk version "17.0.11" 2024-04-16
OpenJDK Runtime Environment (build 17.0.11+9)
4.2 配置 Maven
Maven 是 Java 项目的构建工具,Spring Boot 项目默认使用它管理依赖。
macOS 安装:
bash
brew install maven
验证安装:
bash
mvn -version
建议配置国内镜像仓库(阿里云),加速依赖下载。编辑 ~/.m2/settings.xml:
xml
<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
4.3 IntelliJ IDEA 适配
IntelliJ IDEA 是 Java 开发最常用的 IDE。建议使用 IDEA 2023.2 及以上版本,对 Spring Boot 3.x 支持更完善。
安装后需要配置:
Project Structure→Project SDK选择 JDK 17;Settings→Build Tools→Maven选择本机 Maven 路径;- 安装 Lombok 插件(如项目使用)。
5. 使用 Spring Initializr 创建项目
5.1 在线创建
访问 Spring Initializr,填写项目信息:
| 配置项 | 推荐值 |
|---|---|
| Project | Maven |
| Language | Java |
| Spring Boot | 3.3.x |
| Group | com.example |
| Artifact | demo |
| Java | 17 |
5.2 依赖选择
本文只需要一个依赖:
- Spring Web:提供 REST 接口开发能力,内嵌 Tomcat 容器。
点击「Generate」下载项目压缩包,解压后用 IDEA 打开。
5.3 项目结构解读
demo/
├── src/
│ ├── main/
│ │ ├── java/com/example/demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/com/example/demo/
│ └── DemoApplicationTests.java
├── pom.xml
└── mvnw
关键文件说明:
DemoApplication.java:启动类,包含main方法,是项目的入口;application.properties:配置文件,可设置端口、日志等;pom.xml:Maven 依赖与构建配置;mvnw:Maven Wrapper,无需本机安装 Maven 也可构建。
整个创建流程可以概括为:
#mermaid-svg-TXEtGXS3Yw81E3Y4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .error-icon{fill:#552222;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .marker.cross{stroke:#333333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 p{margin:0;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .cluster-label text{fill:#333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .cluster-label span{color:#333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .cluster-label span p{background-color:transparent;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .label text,#mermaid-svg-TXEtGXS3Yw81E3Y4 span{fill:#333;color:#333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .node rect,#mermaid-svg-TXEtGXS3Yw81E3Y4 .node circle,#mermaid-svg-TXEtGXS3Yw81E3Y4 .node ellipse,#mermaid-svg-TXEtGXS3Yw81E3Y4 .node polygon,#mermaid-svg-TXEtGXS3Yw81E3Y4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .rough-node .label text,#mermaid-svg-TXEtGXS3Yw81E3Y4 .node .label text,#mermaid-svg-TXEtGXS3Yw81E3Y4 .image-shape .label,#mermaid-svg-TXEtGXS3Yw81E3Y4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .rough-node .label,#mermaid-svg-TXEtGXS3Yw81E3Y4 .node .label,#mermaid-svg-TXEtGXS3Yw81E3Y4 .image-shape .label,#mermaid-svg-TXEtGXS3Yw81E3Y4 .icon-shape .label{text-align:center;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .node.clickable{cursor:pointer;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .arrowheadPath{fill:#333333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-TXEtGXS3Yw81E3Y4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TXEtGXS3Yw81E3Y4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-TXEtGXS3Yw81E3Y4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .cluster text{fill:#333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .cluster span{color:#333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-TXEtGXS3Yw81E3Y4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .icon-shape,#mermaid-svg-TXEtGXS3Yw81E3Y4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .icon-shape p,#mermaid-svg-TXEtGXS3Yw81E3Y4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .icon-shape .label rect,#mermaid-svg-TXEtGXS3Yw81E3Y4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TXEtGXS3Yw81E3Y4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-TXEtGXS3Yw81E3Y4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-TXEtGXS3Yw81E3Y4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 访问 Spring Initializr
填写项目信息
选择依赖 Spring Web
点击 Generate 下载
用 IDEA 打开项目
项目结构就绪
6. 编写第一个 REST 接口
6.1 创建 Controller 类
在 com.example.demo 包下新建 HelloController.java:
java
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, Spring Boot!";
}
}
6.2 注解解读
@RestController:标记该类为 REST 控制器,所有方法的返回值直接作为 HTTP 响应体返回;@GetMapping("/hello"):将 HTTP GET 请求映射到该方法,路径为/hello。
7. 项目启动方式与日志解读
7.1 启动方式
在 IDEA 中直接运行 DemoApplication 的 main 方法,或在项目根目录执行:
bash
mvn spring-boot:run
7.2 启动日志解读
启动成功后,控制台会输出关键日志:
Starting DemoApplication using Java 17.0.11
Tomcat started on port 8080 (http) with context path ''
Started DemoApplication in 2.3 seconds
Tomcat started on port 8080:内嵌 Tomcat 已启动,监听 8080 端口;Started DemoApplication in 2.3 seconds:应用启动完成。
7.3 验证接口
浏览器访问 http://localhost:8080/hello,页面显示:
Hello, Spring Boot!
至此,你的第一个 Spring Boot REST 接口已经跑通。
一次完整的请求链路如下:
HelloController 内嵌 Tomcat 浏览器 HelloController 内嵌 Tomcat 浏览器 #mermaid-svg-wDlR3nm82hMpz5HL{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wDlR3nm82hMpz5HL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wDlR3nm82hMpz5HL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wDlR3nm82hMpz5HL .error-icon{fill:#552222;}#mermaid-svg-wDlR3nm82hMpz5HL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wDlR3nm82hMpz5HL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wDlR3nm82hMpz5HL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wDlR3nm82hMpz5HL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wDlR3nm82hMpz5HL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wDlR3nm82hMpz5HL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wDlR3nm82hMpz5HL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wDlR3nm82hMpz5HL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wDlR3nm82hMpz5HL .marker.cross{stroke:#333333;}#mermaid-svg-wDlR3nm82hMpz5HL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wDlR3nm82hMpz5HL p{margin:0;}#mermaid-svg-wDlR3nm82hMpz5HL .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-wDlR3nm82hMpz5HL text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-wDlR3nm82hMpz5HL .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-wDlR3nm82hMpz5HL .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-wDlR3nm82hMpz5HL .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-wDlR3nm82hMpz5HL .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-wDlR3nm82hMpz5HL #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-wDlR3nm82hMpz5HL .sequenceNumber{fill:white;}#mermaid-svg-wDlR3nm82hMpz5HL #sequencenumber{fill:#333;}#mermaid-svg-wDlR3nm82hMpz5HL #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-wDlR3nm82hMpz5HL .messageText{fill:#333;stroke:none;}#mermaid-svg-wDlR3nm82hMpz5HL .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-wDlR3nm82hMpz5HL .labelText,#mermaid-svg-wDlR3nm82hMpz5HL .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-wDlR3nm82hMpz5HL .loopText,#mermaid-svg-wDlR3nm82hMpz5HL .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-wDlR3nm82hMpz5HL .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-wDlR3nm82hMpz5HL .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-wDlR3nm82hMpz5HL .noteText,#mermaid-svg-wDlR3nm82hMpz5HL .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-wDlR3nm82hMpz5HL .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-wDlR3nm82hMpz5HL .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-wDlR3nm82hMpz5HL .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-wDlR3nm82hMpz5HL .actorPopupMenu{position:absolute;}#mermaid-svg-wDlR3nm82hMpz5HL .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-wDlR3nm82hMpz5HL .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-wDlR3nm82hMpz5HL .actor-man circle,#mermaid-svg-wDlR3nm82hMpz5HL line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-wDlR3nm82hMpz5HL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} GET /hello 转发请求 执行 hello() 方法 返回 "Hello, Spring Boot!" HTTP 200 响应
8. 常见启动报错排查清单
| 报错信息 | 原因 | 解决方案 |
|---|---|---|
Unsupported class file major version 61 |
JDK 版本过低 | 升级到 JDK 17 及以上 |
Port 8080 was already in use |
端口被占用 | 修改 application.properties 中的 server.port |
Failed to configure a DataSource |
引入了数据库依赖但未配置 | 移除相关依赖,或配置数据源 |
APPLICATION FAILED TO START |
配置或依赖问题 | 查看日志中 Description 部分定位原因 |
Cannot resolve symbol 'SpringBootApplication' |
Maven 依赖未下载完成 | 执行 mvn clean install 刷新依赖 |
9. 总结
本文从 Spring Boot 的基本概念出发,完成了 JDK 17、Maven、IDEA 的环境搭建,通过 Spring Initializr 创建了项目,并编写了第一个 REST 接口。核心要点回顾:
- Spring Boot 3.x 需要 JDK 17 及以上;
- 推荐使用 JDK 17 + Spring Boot 3.3.x 组合;
@RestController+@GetMapping即可快速暴露 REST 接口;- 遇到报错时,优先查看启动日志定位问题。
下一步可以尝试:添加 @PostMapping 接口、接入数据库、学习 Spring Boot 的自动配置原理。