問題描述:
項目本地運行沒有問題,但是在部署到遠程服務器時報錯: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只能掃描啓動類所在模塊。