Spring Boot 启动失败本质是 ApplicationContext 刷新失败,主因包括端口占用(如8080被占)、YAML格式错误(冒号后缺空格、Tab缩进)、依赖冲突(版本不兼容或缺失驱动)、启动类配置不当(@SpringBootApplication缺失或扫描路径不匹配)。

端口被占用或配置冲突
这是最直观也最高频的问题。Spring Boot 默认监听 8080 端口,一旦被 Chrome、另一个 Spring Boot 实例、Tomcat 或 Docker 容器占着,就会直接报 PortInUseException 或 BindException。
- 检查方式:命令行执行
netstat -ano | findstr :8080(Windows)或lsof -i :8080(Mac/Linux) - 临时解决:在
application.yml中加一行server: port: 8081 - 注意:IDEA 中若同时运行多个模块,容易重复绑定同一端口,建议用不同 profile 隔离
application.yml 或 application.properties 写错了
YAML 对格式极其敏感,一个空格、一个 Tab、一个冒号后没空格,都可能导致解析失败,报 ScannerException 或 IllegalArgumentException。
-
port:8080❌(冒号后缺空格)→ 应写成port: 8080✅ - 用 Tab 缩进 ❌ → 只能用空格,推荐统一设为 2 个空格
- 数据库 URL 含特殊字符(如
&)未转义,或密码含#没加引号,也会中断加载 - 建议用 IDEA 自带的 YAML 校验,或粘贴到 yamlchecker.com 快速验证
依赖缺失或版本打架
比如用了 MyBatis Starter 却没加 JDBC 驱动;或者 Spring Boot 3.x 项目误引入了 Spring Boot 2.x 的 starter,导致 NoClassDefFoundError 或 MethodNotFound。
- 运行
mvn dependency:tree -Dincludes=org.springframework查关键包是否多版本共存 - 常见冲突点:Jackson、Hibernate Validator、logback、javax.xml.bind(JDK 11+ 已移除,需显式加依赖)
- Maven 报红不等于启动失败,但
target/classes下找不到某个 class,基本就是依赖没拉下来或被排除了
启动类或包结构不合规
Spring Boot 要求启动类具备特定“身份”,否则扫描不到 Controller、Component,甚至根本进不了 SpringApplication.run()。
- 启动类必须有
@SpringBootApplication注解 - 必须包含标准
public static void main(String[] args) - 类路径不能太深——如果启动类在
com.example.project.boot.DemoApplication,而 Controller 在com.example.api.UserController,默认扫描不到(除非显式指定@ComponentScan) - 确认
src/main/java是 Sources Root(右键目录 → Mark as Sources Root)


















