Tomcat/Spring Boot启动报错:无法解析占位符${datasource.driver}
错误排查方案
报错信息:
java.lang.IllegalArgumentException: Could not resolve placeholder 'datasource.driver' in value "${datasource.driver}"
排查步骤
- 检查引入的第三方依赖与自动装配逻辑
Spring Boot自动装配会加载依赖包内的配置类,部分自定义starter、未适配的公共依赖包可能硬编码了${datasource.driver}占位符且未设置默认值。Spring Boot项目可在启动参数增加--debug,从输出的自动配置报告中检索datasource相关配置类,定位触发属性加载的依赖来源。 - 检查所有生效的配置来源
除了项目内的application.yml/application.properties、bootstrap.yml/bootstrap.properties外,还要检查:- 服务启动参数指定的外部配置文件、JVM系统属性
- Tomcat容器的
catalina.properties、context配置 - 配置中心(nacos/apollo等)的公共配置、命名空间配置
- 本地未提交到版本控制的临时配置文件
这类不在源码目录的配置很容易被忽略,可能存在未清理的旧配置项。
- 断点调试定位触发位置
在报错栈对应的PropertyPlaceholderHelper.replacePlaceholders方法处打debug断点,查看占位符替换的上下文,可直接定位到是哪个配置类、哪个属性绑定逻辑触发了该占位符的解析,排查是否存在属性前缀拼接、拼写错误导致的间接引用。 - 验证打包产物一致性
解压编译打包后的jar/war包,全局搜索datasource.driver字符串,确认是否存在旧缓存配置、maven/gradle资源过滤逻辑意外引入的占位符。 - 快速验证方案
可临时在项目配置文件中添加datasource.driver=对应数据库驱动类名,如果启动成功,再通过Spring Boot的/actuator/env端点(需开启actuator)查询该属性的来源,快速缩小范围。
内容的提问来源于stack exchange,提问作者K-ticktock
相关产品推荐
相关产品推荐

