0.背景
项目:SpringMVC+mybatis+maven
问题:debug项目的时候一直报错:
DEBUG[com.xxxx.mybatis.SqlSessionFactoryBeanExtention:389]- Parsed mapper file: '"/D:/Software/wildfly/wildfly-18.0.1-3/bin/content/xxxx-web-v1.0.9.war/WEB-INF/lib/xxx-xxxxx-4.5.0-ln.jar/mapping/mysql/xxxxxx.map.xml"'
以前没时间找原因,今天空出点时间,把这个问题简单总结一下。
1.原因分析
程序报错一直是”解析映射文件“,为啥一直要解析,主要原因是有的东西一直解析不了所以会在一直解析(非常奇怪,解析不了为啥不直接报错)。
2.解决办法
结合的实际遇到的和网上的一些方法,总结解决办法如下:
1.把断点去掉,特别是Mapper层的断点,重新maven clean install一下
2.在xml中注意一些转义字符,比如我们写的小于号 ”<“,不能直接写成小于号,要写成转义字符 “<”/
详解这篇文章:Mybaits中的转义字符 – 每天进步一点点 (longkui.site)
3.把类的引用标记清楚,不要引用一些没有定义的类。
第三个是我今天刚遇到的,有人在XML的resultType中引用了一个实体类,结果这个类忘了提交git。我下载下代码后一直报上面的错。这个是时候,你就打开XML文件,找到 ”爆红“的地方,修改即可。
(20230423 此继续更新)
今天又遇到了这个问题,上面的错误又发生了,在一一排查上面有可能的原因外,程序还是一直在刷 xxxx.xml文件。
然后发现,同事的项目正常跑,我的项目就有问题,那么大概率是我的问题。
然后继续排查这个问题,因为报错的提示一直有关是mybaits的,所以我怀疑是我本地的spring-mybatis.xml文件配置的问题。
但是,我手动在pom文件中引入依赖以后,还是一样的问题。
继续找。
然后在网上看到一篇文章说是org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory 这个类中所有捕获异常打断点。
然后这个类刚好在上面图片中出现的spring-beans:5.1.7中。然后我尝试在AbstractAutowireCapableBeanFactory这个类中打断点捕获异常,但是,捕获的异常太多了(有可能是我们框架本身的问题),根本不可能一个一个分析,然后想到了一个办法,就是当不断刷刷新 …xml文件时打断点。
然后在createBean方法中捕获到了下面的异常:
发现异常中的mdb每次都指向我们仓库的一个jar包。
然后,在本地仓库中,直接手动删除这个jar包,然后重新刷新maven,重新从服务器拉取这个jar包,启动项目,成功了!