⚙️ Spring Boot 启动失败:Error starting ApplicationContext — 一次 MyBatis-Plus 与 Spring Boot 版本不兼容的血泪排查
💡 本文记录一次真实的 Spring Boot 项目启动失败排查过程,
原因竟是 MyBatis-Plus 与 Spring Boot 版本不兼容。
适合所有在启动时遇到Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2025-10-12 20:21:23.873 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed
🧠 一、问题背景
项目环境如下:
| 组件 | 版本 |
|---|---|
| JDK | 17 |
| Spring Boot | 3.1.7 |
| MyBatis-Plus | 3.5.5 |
| Maven | 3.8.5 |
| IDEA | 2024.4 |
项目结构正常、Mapper 扫描正常,命令行构建和运行都没问题:
mvn clean package -DskipTests java -jar target/backend-0.0.1-SNAPSHOT.jar
✅ 服务启动成功。
但用 IDEA Run 启动时,却频繁报错:
❌ 二、报错现象
控制台输出如下:
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2025-10-13 08:27:07.096 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed
或者:
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'ddlApplicationRunner' is expected to be of type 'org.springframework.boot.Runner' but was actually of type 'org.springframework.boot.SpringApplication'
一开始以为是:
- Mapper 没扫描到
- 数据库没连上
- Bean 类型冲突
但这些排查后都没问题。
🔎 三、真正原因:MyBatis-Plus 与 Spring Boot 的版本不兼容!
查看项目依赖树后发现:
mvn dependency:tree | grep mybatis
输出:
com.baomidou:mybatis-plus-boot-starter:3.5.5 └── org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.2
也就是说:
MyBatis-Plus 3.5.5 内部传递引入了 MyBatis-Spring-Boot-Starter 3.0.2,
而这个版本与 Spring Boot 3.1.x 存在兼容性问题。
具体表现为:
- ApplicationContext 启动失败;
- BeanNotOfRequiredTypeException;
ddlApplicationRunner类型识别错误;- IDEA Run 启动失败但打包 jar 启动正常。
📚 四、官方说明
来自 MyBatis-Plus 官方 issue:
🪲 baomidou/mybatis-plus#5982
在 Spring Boot 3.1.x + MyBatis-Plus 3.5.5 环境下,应用可能无法正常启动,
已在 3.5.6 版本中修复。
🧩 五、解决方案(推荐且最稳)
在你的 pom.xml 中,将 MyBatis-Plus 升级为 3.5.6 或更高版本:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.6</version> <!-- ✅ 或使用 3.5.8 最新版 --> </dependency>
然后执行:
mvn clean package -DskipTests
重新运行:
java -jar target/backend-0.0.1-SNAPSHOT.jar
✅ 一切恢复正常!
🧹 六、防止缓存依赖干扰(可选)
为避免本地 .m2 缓存的旧版本干扰,建议彻底清理:
mvn clean dependency:purge-local-repository -DreResolve=false mvn install -DskipTests
💡 七、经验总结
| 问题现象 | 根本原因 | 解决方案 |
|---|---|---|
IDEA 启动时报 ApplicationContext failed | MyBatis-Plus 3.5.5 传递依赖旧版 mybatis-spring-boot-starter | 升级到 3.5.6+ |
Bean 类型冲突 (ddlApplicationRunner) | Starter 内部 Bean 定义不兼容 | 升级依赖版本 |
| 命令行能跑,IDEA 不行 | IDEA 编译时触发旧 Bean 加载逻辑 | 统一版本并清理缓存 |
🧱 八、参考环境(可直接使用)
<properties> <java.version>17</java.version> <spring-boot.version>3.1.7</spring-boot.version> <mybatis-plus.version>3.5.6</mybatis-plus.version> </properties>
🎯 九、一句话总结
你的配置是对的、Mapper 也扫描了、数据库也没问题。
真正的罪魁祸首是 MyBatis-Plus 3.5.5 与 Spring Boot 3.1.x 的兼容性 Bug。
升级 MyBatis-Plus 至 3.5.6 或更高版本即可彻底解决。