惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
A
About on SuperTechFans
量子位
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
Blog — PlanetScale
Blog — PlanetScale
Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
Google DeepMind News
Google DeepMind News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
Google Developers Blog
U
Unit 42
D
DataBreaches.Net
博客园 - Franky
D
Docker
宝玉的分享
宝玉的分享
Y
Y Combinator Blog
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Hugging Face - Blog
Hugging Face - Blog

沉迷在 - Java.li - 无法自拔

Spring Boot 整合 MyBatis DeepSeek Harness 深入解读 Spring Boot 连接 MySQL GitHub发生故障,崩了7个小时 Spring Boot 配置文件怎么写 MyBatis Invalid bound statement 怎么处理 Spring Boot 端口被占用怎么处理 Qdrant 向量数据库入门 Spring Boot 接收 JSON 参数 Spring Boot启动报错 Failed to configure a DataSource 解决办法 Maven依赖冲突怎么排查?dependency:tree、exclusions与版本统一完整教程 - 沉迷在 - Java.li - 无法自拔 给网站加一条会动的人群横幅:Little People 动画组件 Demo - 沉迷在 - Java.li - 无法自拔 【soso.re】聚合热榜 | CloudflareWorkers部分接口失效的排查与代理方案 - 沉迷在 - Java.li - 无法自拔 Spring Boot 2升级到Spring Boot 3完整指南:JDK17、javax迁移jakarta、依赖兼容与常见报错 - 沉迷在 - Java.li - 无法自拔 随机小姐姐视频 - 沉迷在 - Java.li - 无法自拔 Spring Boot与JDK版本兼容表:Spring Boot 2.x / 3.x / 4.x应该用哪个Java版本? - 沉迷在 - Java.li - 无法自拔 No compiler is provided in this environment解决办法:JDK、JRE、Maven与IDEA排查 - 沉迷在 - Java.li - 无法自拔 置身钉内|含全文 PDF - 沉迷在 - Java.li - 无法自拔 javac不是内部或外部命令怎么解决?JDK、JAVA_HOME和Path完整排查 Windows配置JAVA_HOME后不生效怎么办?java -version显示旧版本解决办法 Maven Could not transfer artifact 下载失败解决:settings.xml、国内镜像、本地缓存与代理排查 JSON转Java实体类完整教程:对象、数组、嵌套结构与LocalDateTime处理 Windows安装JDK 8 / 17 / 21 / 25完整教程:JAVA_HOME环境变量配置与验证 IDEA下载JDK很慢怎么办?手动配置本地JDK完整教程 Java版本号与class文件major version对照表:Unsupported class file major version 52 / 55 / 61 / 65 / 69 / 70 Gradle国内镜像配置教程:init.gradle、repositories与Wrapper加速完整指南 Maven国内镜像settings.xml配置大全:阿里云、腾讯云、华为云、清华源 Java开发者必备工具箱 2026年Java行情深度解读:就业真实现状、语言排名与开发者破局指南 如何防止服务器被暴力破解?2026年最全的5层防护实战指南
SpringBoot 教程
HiF · 2026-08-05 · via 沉迷在 - Java.li - 无法自拔

最后更新:2026-08-05
适合人群:刚开始学 Java 后端、准备做 Spring Boot 项目、正在从普通 Java 项目转 Spring Boot 的开发者
相关内容:JDK、Maven、Gradle、Spring Boot、REST API、JSON、MyBatis、MySQL、项目部署

Spring Boot 是现在 Java 后端开发里最常用的一套框架工具。它不是要替代 Spring,而是把 Spring 项目的初始化、依赖配置、内嵌服务器、自动配置这些事情做得更省心。

以前新建一个 Spring 项目,经常要手动配一堆 XML、Tomcat、依赖版本。Spring Boot 的思路更直接:选好依赖,写好业务代码,项目就能直接跑起来。Spring 官方对 Spring Boot 的介绍也是“创建可独立运行、生产级别的 Spring 应用,并尽量减少配置”。(Home)

这篇文章不讲玄乎的概念,按实际开发顺序来:先准备环境,再创建项目,然后写接口、接收参数、连接数据库,最后讲常见报错和后续学习路线。


一、学 Spring Boot 前要准备什么

不要一上来就直接学微服务、分布式、源码分析。Spring Boot 入门前,先把这几件事准备好:

1. 会一点 Java 基础语法
2. 能安装和切换 JDK
3. 会用 IDEA 打开项目
4. 知道 Maven 或 Gradle 是干什么的
5. 能看懂简单的 Controller、Service、Mapper 分层
6. 知道 HTTP、JSON、接口请求这些基本概念

如果环境还没配置好,可以先看这些文章:

各版本JDK镜像下载地址

Windows 安装 JDK 教程

IDEA 配置本地 JDK 教程

Maven 国内镜像配置教程

Gradle 国内镜像配置教程

现在新项目一般建议优先用 JDK17 或 JDK21。Spring Boot 当前官方系统要求里,Spring Boot 4.1.0 至少需要 Java 17,并兼容到 Java 26。不同 Spring Boot 版本对 JDK 的支持范围不一样,别只看“Spring Boot”这几个字就随便选 JDK。(Home)

可以先看这篇:
Spring Boot JDK 兼容表


二、Spring Boot 适合解决什么问题

Spring Boot 最适合做这类 Java 后端项目:

REST API 服务
后台管理系统
博客系统
权限系统
接口管理系统
企业内部系统
小程序 / App 后端接口
定时任务服务
轻量级微服务

常见组合是:

Spring Boot + Maven + MyBatis + MySQL
Spring Boot + Maven + MyBatis-Plus + MySQL
Spring Boot + Redis
Spring Boot + Spring Security
Spring Boot + Docker

新手不要一开始就追:

Spring Cloud
Nacos
Gateway
Seata
Sentinel
Dubbo
分布式事务
秒杀系统

这些不是不能学,而是要等单体项目、接口开发、数据库操作、部署流程都熟悉之后再学。否则很容易变成“项目能跑,但完全不知道为什么”。


三、怎么创建 Spring Boot 项目

最常见的方式是用 Spring Initializr。

Spring 官方入门指南也建议通过 Spring Initializr 填写项目信息、选择依赖,然后下载一个项目压缩包。(Home)

创建时建议这样选:

Project:Maven
Language:Java
Spring Boot:选择当前稳定版本
Packaging:Jar
Java:17 或 21

常用依赖可以先选:

Spring Web
Validation
MyBatis Framework
MySQL Driver
Lombok

如果只是写第一个接口,只选:

Spring Web
Lombok

就够了。

不要一开始把 Redis、Security、JPA、OAuth2、RabbitMQ、Kafka 全部勾上。依赖越多,启动问题越多,排查难度也越高。


四、一个最简单的 Spring Boot 项目结构

常见结构大概是这样:

src/main/java
└── com/example/demo
    ├── DemoApplication.java
    ├── controller
    │   └── UserController.java
    ├── service
    │   └── UserService.java
    ├── mapper
    │   └── UserMapper.java
    ├── entity
    │   └── User.java
    ├── dto
    │   └── UserCreateRequest.java
    └── vo
        └── UserVO.java

src/main/resources
├── application.yml
└── mapper
    └── UserMapper.xml

简单理解:

controller:接收请求
service:写业务逻辑
mapper:访问数据库
entity:数据库表对应对象
dto:接收前端参数
vo:返回给前端的数据
application.yml:配置文件

新手最容易犯的错是把所有代码都写在 Controller 里。这样一开始能跑,但项目一复杂就很难维护。

比较舒服的写法是:

Controller 只处理请求和响应
Service 处理业务
Mapper 只处理数据库
DTO 和 VO 分开

五、写第一个接口

先写一个简单接口:

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

启动项目后访问:

http://localhost:8080/hello

能看到:

Hello Spring Boot

这里几个注解先记住:

@RestController:表示这是一个接口控制器
@GetMapping:处理 GET 请求
@PostMapping:处理 POST 请求
@RequestMapping:设置统一请求路径

比如:

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public String getUser(@PathVariable Long id) {
        return "用户ID:" + id;
    }
}

访问:

http://localhost:8080/users/1

六、Spring Boot 接收 JSON 参数

写后端接口时,最常见的是前端传 JSON,后端用 Java 对象接住。

请求 JSON:

{
  "username": "zhangsan",
  "age": 18
}

DTO:

import lombok.Data;

@Data
public class UserCreateRequest {

    private String username;

    private Integer age;
}

Controller:

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public String createUser(@RequestBody UserCreateRequest request) {
        return "接收到用户:" + request.getUsername();
    }
}

请求头要是:

Content-Type: application/json

如果请求头不对,或者 JSON 结构和 Java 对象对不上,就容易出现:

Required request body is missing
415 Unsupported Media Type
JSON parse error
Cannot deserialize value of type

这部分可以继续看:
Spring Boot 接收 JSON 参数

JSON转Java实体类完整教程


七、Spring Boot 配置文件怎么写

Spring Boot 常见配置文件有两种:

application.yml
application.properties

我个人更推荐 application.yml,层级更清楚。

例如配置端口:

server:
  port: 8081

配置应用名:

spring:
  application:
    name: demo-api

配置不同环境:

application.yml
application-dev.yml
application-prod.yml

application.yml 中激活开发环境:

spring:
  profiles:
    active: dev

如果你改了 application-dev.yml,但没有激活 dev,配置不会生效。这类问题很常见。

端口被占用可以看:
Spring Boot 端口被占用怎么处理


八、Spring Boot 连接 MySQL

连接 MySQL 一般需要三件事:

1. 引入数据库驱动
2. 配置 spring.datasource
3. 写 Mapper 或 Repository

Maven 依赖:

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

如果你引入了数据库相关依赖,却没写数据库配置,就容易报:

Failed to configure a DataSource

这篇可以直接看:
Spring Boot DataSource 报错怎么处理


九、Spring Boot 整合 MyBatis

Spring Boot 项目里,MyBatis 是很常见的持久层方案。

Maven 依赖:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.4</version>
</dependency>

Mapper 接口:

public interface UserMapper {

    User selectUserById(Long id);
}

Mapper XML:

<mapper namespace="com.example.demo.mapper.UserMapper">

    <select id="selectUserById" resultType="com.example.demo.entity.User">
        select id, username, nickname
        from user
        where id = #{id}
    </select>

</mapper>

配置 XML 路径:

mybatis:
  mapper-locations: classpath*:mapper/**/*.xml

启动类加:

@MapperScan("com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {
}

如果接口和 XML 没绑定上,就可能报:

Invalid bound statement (not found)

继续看:
MyBatis Invalid bound statement 怎么处理


十、统一返回结果

真实项目里,不建议接口一会儿返回字符串,一会儿返回 Map,一会儿返回对象。

可以统一成这种格式:

{
  "code": 200,
  "message": "success",
  "data": {}
}

简单封装:

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class ApiResult<T> {

    private Integer code;

    private String message;

    private T data;

    public static <T> ApiResult<T> success(T data) {
        return new ApiResult<>(200, "success", data);
    }

    public static <T> ApiResult<T> fail(String message) {
        return new ApiResult<>(500, message, null);
    }
}

Controller:

@GetMapping("/{id}")
public ApiResult<UserVO> getUser(@PathVariable Long id) {
    UserVO user = new UserVO();
    user.setId(id);
    user.setUsername("zhangsan");
    return ApiResult.success(user);
}

这类写法不是必须,但会让前后端联调舒服很多。


十一、参数校验

接口参数不能只靠前端校验。后端也要校验。

依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

DTO:

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

@Data
public class UserCreateRequest {

    @NotBlank(message = "用户名不能为空")
    private String username;

    @NotNull(message = "年龄不能为空")
    private Integer age;
}

Controller:

@PostMapping
public ApiResult<Long> createUser(@Valid @RequestBody UserCreateRequest request) {
    return ApiResult.success(1L);
}

Spring MVC 官方文档说明,@RequestBody 可以配合 @Valid@Validated 触发 Bean Validation,校验失败时默认会抛出相关异常并返回 400 响应。(Home)

后续可以单独写一篇:

Spring Boot 参数校验

十二、全局异常处理

项目里不要到处写:

try {
    ...
} catch (Exception e) {
    ...
}

更常见的做法是统一异常处理:

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(RuntimeException.class)
    public ApiResult<Void> handleRuntimeException(RuntimeException e) {
        return ApiResult.fail(e.getMessage());
    }
}

这样业务里可以直接抛异常:

throw new RuntimeException("用户不存在");

接口返回统一格式:

{
  "code": 500,
  "message": "用户不存在",
  "data": null
}

真实项目里还可以继续细分:

参数校验异常
业务异常
权限异常
数据库异常
第三方接口异常

十三、日志怎么配置

Spring Boot 默认已经有日志能力。普通项目先不要急着自己引入一堆日志依赖。

常用配置:

logging:
  level:
    root: info
    com.example.demo: debug

日志里建议打印:

请求关键参数
业务关键节点
外部接口调用结果
异常堆栈
耗时信息

不要打印:

密码
token
身份证
手机号完整明文
银行卡
敏感业务数据

新手常犯的错是把日志当 System.out.println() 用。开发阶段可以临时打印,但正式项目建议用日志框架。


十四、Spring Boot 打包运行

Maven 项目打包:

mvn clean package

生成文件一般在:

target/demo-0.0.1-SNAPSHOT.jar

运行:

java -jar target/demo-0.0.1-SNAPSHOT.jar

指定端口:

java -jar target/demo-0.0.1-SNAPSHOT.jar --server.port=8081

指定环境:

java -jar target/demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

如果 Maven 下载依赖失败,可以看:
Maven 下载依赖失败怎么处理

如果依赖冲突,可以看:
Maven 依赖冲突怎么排查


十五、Spring Boot 常见报错

Spring Boot 入门阶段,常见报错基本集中在这几个方向:

JDK版本不对
Maven依赖下载失败
端口被占用
数据库配置缺失
JSON参数接收失败
Mapper XML找不到
配置文件没生效

本站已经整理了几篇常见问题:
Spring Boot DataSource 报错怎么处理

Spring Boot 端口被占用怎么处理

Spring Boot 接收 JSON 参数

MyBatis Invalid bound statement 怎么处理

Java major version 对照表

Maven 下载依赖失败怎么处理

遇到报错时,不要只复制最后一行。要看完整堆栈,尤其是:

Caused by
APPLICATION FAILED TO START
Description
Action

Spring Boot 很多启动失败日志会直接给出建议,别忽略它。


十六、Spring Boot 版本怎么选

不要只看网上教程用什么版本。要看你自己的 JDK、依赖和项目情况。

大致建议:

老项目:按现有版本维护,不要盲目升级
Spring Boot 2.7 项目:可以准备向 Spring Boot 3 迁移
当前新项目:优先 Spring Boot 3.x + JDK21
长期新项目:可以关注 Spring Boot 4.x + JDK25

版本兼容可以看:
Spring Boot JDK 兼容表

如果你要从 2 升到 3,可以看:
Spring Boot 2 升级 3 指南

升级 Spring Boot 不只是改版本号,还要检查:

JDK版本
Maven / Gradle版本
Spring Security
MyBatis / JPA
javax 到 jakarta
第三方 Starter
Docker 和 CI/CD 环境

十七、推荐学习顺序

如果你准备系统学 Spring Boot,可以按这个顺序:

1. JDK 和 IDEA 环境配置
2. Maven 基础
3. Spring Boot 创建项目
4. Controller 和接口
5. JSON 参数接收
6. 配置文件 application.yml
7. MySQL 数据库连接
8. MyBatis / MyBatis-Plus
9. 统一返回结果
10. 参数校验
11. 全局异常处理
12. 日志配置
13. 打包部署
14. 常见报错排查
15. 再学 Spring Security、Redis、Docker、微服务

不要一上来就学微服务。先把单体 Spring Boot 项目写顺,后面会轻松很多。


十八、一个小项目应该包含哪些功能

如果你想做一个 Spring Boot 练手项目,建议至少包含这些内容:

用户注册登录
用户列表分页
新增、编辑、删除
参数校验
统一返回结果
全局异常处理
MyBatis 查询
MySQL 数据库
接口文档
日志
打包部署

项目可以很小,但流程要完整。

比如:

图书管理系统
博客系统
任务管理系统
后台管理系统
接口管理系统

不要一开始就做“秒杀系统”“大型分布式商城”。那些项目不是入门项目。


十九、Spring Boot 适合和哪些技术一起学

入门阶段:

Maven
MySQL
MyBatis
JSON
HTTP
IDEA
Postman / Apifox

进阶阶段:

Redis
Spring Security
Docker
Linux
Nginx
JVM
日志和监控

再往后:

Spring Cloud
消息队列
分布式事务
网关
配置中心
注册中心
链路追踪

学习顺序不要反过来。基础没稳,直接学分布式,很容易只记住一堆名词。


二十、最后总结

Spring Boot 入门不难,难的是别一上来把东西学散。

先抓住这条主线:

创建项目
写接口
接收参数
连接数据库
返回结果
处理异常
打包部署
排查报错

对新手来说,最值得先掌握的是:

Controller
@RequestBody
application.yml
Maven
MyBatis
MySQL
统一返回
全局异常
日志
打包运行

不要急着追 Spring Cloud。先把一个 Spring Boot 单体项目做完整,比看十套微服务视频更有用。


二十一、本站推荐阅读

Java 环境配置:
Java开发环境配置专题

Spring Boot 版本:
Spring Boot JDK 兼容表

Spring Boot 2 升级 3 指南

Spring Boot 报错:
Spring Boot DataSource 报错怎么处理

Spring Boot 端口被占用怎么处理

接口开发:
Spring Boot 接收 JSON 参数

JSON转Java实体类完整教程

MyBatis:
MyBatis Invalid bound statement 怎么处理

Maven:
Maven 国内镜像配置教程

Maven 依赖冲突怎么排查


更新记录

2026-08-05:
- 创建 Spring Boot 教程入口文章
- 增加 Spring Boot 学习前置要求
- 增加项目结构、接口、JSON参数、数据库、MyBatis、统一返回、异常处理、打包部署说明
- 增加本站 Spring Boot 相关文章阅读顺序