起因:
在打包后执行jar包是会出现如下错误:
Invocation of init method failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):com.***.***.;
分析:
主观分析:
应该是namespace或者注解扫描位置错误导致无法加载xml文件。
解决:
1、检查namespace是否一致
2、检查配置文件中的包扫描位置是否正确
结果:
namespace配置、方法名称、包扫描位置都正确。但是依旧会出现如上错误。
查找前人踩过的坑:
再次尝试解决:
按照文章中的两步操作
1、检查target文件夹下的mapper
发现是将其编译进去了
2、在pom中添加resource标签,将静态文件强制打包进去
结果:
push之后使用Jenkins+docker发布依旧是最开始的错误。
再次分析:
将线上打包的jar下载到本地。解压后发现了问题所在:
线上Jenkins拉去代码后并没有按照约定的建mapper/job文件夹,而是直接建了一个mapper.job的文件夹。
但配置文件中做的扫描位置又是classpath:mapper/**/*.xml 与目前jar中的文件夹名不匹配,所以无法加载。
再次尝试:
让mapper.job包建为两个文件夹即可。
博主采用的是在mapper文件夹下创建了一个与job文件夹同级的README.md文件。
解决问题的同时还可以提醒后期接手小伙伴注意此问题。
最终结果:
bug解决