1. 问题现象与背景分析
最近在将Spring Boot 3与MyBatis-Plus进行整合时,遇到了一个典型的启动报错:"Bean named 'ddlApplicationRunner' is expected to be of type 'org.sprin..."。这个错误看似简单,但实际上涉及Spring Boot自动配置、Bean类型匹配以及框架整合的多个技术点。
1.1 错误信息的完整解读
完整的错误信息通常如下:
code复制org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ddlApplicationRunner':
Bean named 'ddlApplicationRunner' is expected to be of type 'org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer$DdlApplicationRunner'
but was actually of type 'com.baomidou.mybatisplus.autoconfigure.MybatisPlusDdlApplicationRunner'
这个错误表明:
- Spring容器期望找到一个类型为
DataSourceInitializer$DdlApplicationRunner的Bean - 但实际上找到的是MyBatis-Plus提供的
MybatisPlusDdlApplicationRunner - 类型不匹配导致容器初始化失败
1.2 技术背景:DdlApplicationRunner的作用
在Spring Boot生态中,DdlApplicationRunner是一个负责数据库初始化的重要组件:
- 主要功能:在应用启动时执行SQL脚本(schema.sql/data.sql)
- 典型场景:开发环境下自动创建表结构或初始化数据
- 执行时机:在ApplicationRunner阶段执行
MyBatis-Plus为了增强对数据库初始化的控制,提供了自己的MybatisPlusDdlApplicationRunner实现,这就与Spring Boot原生的实现产生了冲突。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 问题根因深度剖析
2.1 自动配置的冲突机制
这个问题本质上是Spring Boot自动配置与MyBatis-Plus自动配置的冲突:
- Spring Boot的
DataSourceAutoConfiguration会注册DdlApplicationRunner - MyBatis-Plus的`MybatisPlusAut
