问题描述:
项目本地运行没有问题,但是在部署到远程服务器时报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)。
项目背景描述:
项目是用springboot开发,Modules分为dao、entity、service、web。mapper.xml都在dao的resources中。启动类和yml配置都在web中,然后配置类也加上@MapperScan(“xx.xx.xx.dao”)了,mybatis的配置也 配置好了mapper-locations: classpath*:mapper/*.xml。
解决办法:
将yml文件中的mybatis的配置mapper-locations: classpath:mapper/.xml,改为mapper-locations: classpath*:mapper/.xml。看好了,在classpath后加上星。
思考解决过程:
1.看到这个错误当时的第一想法是dao方法对应的mapper有问题,然后接着去本地运行项目,结果启动成功,流畅运行。
2.因为之前本地运行也碰到过相应的问题,clean了重新编译运行就好了,就又打包上传到远程服务器部署运行,结果还是报错。
3.然后就有点蒙了,就又仔细的检查了和mapper相关的所有配置,都没有问题。
4.网上浏览相关问题,网上在pom.xml的bulid中有以下配置,配置打包后还是不行。
5.之后就对比本地运行和打包运行的区别。
(1)class中是web层的代码,lib是依赖的相关jar包
(2)这是lib中dao、entity、serivce的jar包
这就发现问题了,web里配置的mybatis对应的mapper扫描是不是扫描不到dao的jar包,然后上网搜索相关问题,结果还真是。
6.这就问题简单了,本地运行各模块没有被打成jar包可以扫描到相关路径,就可以正常运行。打包后Springboot只能扫描启动类所在模块。