2019 年建一个简单的 Spring Boot 工程时,我只准备执行 main 中的逻辑,却在启动阶段遇到了数据源错误。最后发现,pom.xml 从别的工程复制过来,带上了并不需要的 MyBatis starter。
这个问题的关键是 classpath:没有写数据库查询代码,不等于应用不会触发数据源相关自动配置。
先看错误指向哪一层
旧记录中的提示涉及无法确定嵌入式数据库驱动,属于创建数据源时失败,而不是业务 SQL 执行失败。排查时先看错误尾部的原因和自动配置条件,不要从“我的 main 没有查库”推断一定是框架误报。
复制依赖中需要关注类似这一项:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
这只是识别依赖的片段,版本应由工程自己的依赖管理确定,不是完整 pom。
用依赖树确认它从哪里来
在对应 Maven 工程中可以查看:
mvn dependency:tree
直接声明和传递引入都值得检查。必要时用启动参数 —debug 查看条件评估报告,确认实际命中了哪些自动配置。Boot 自动配置基于 classpath、已有 Bean 和配置条件作决定。自动配置说明
两种处理对应两种真实需求
我的旧工程不需要数据库,因此移除无用 starter 后启动恢复。这样处理的依据是需求,而不是“starter 一律不能复制”。
如果工程本来就需要 MyBatis,应保留依赖,按环境提供 JDBC 驱动、连接信息及必要的映射配置,并检查配置是否被正确加载。直接排除 DataSourceAutoConfiguration 可能只让后面的 Mapper 创建继续失败。
完成修改后,要同时确认应用正常启动、依赖树符合需求,以及实际需要的功能仍然存在。只消除第一条报错,不足以证明依赖已经整理正确。