首页 / 技术 / 正文

SpirngBoot整合MyBatis出现“SAXParseException”和“文件提前结束”异常解决办法

2020年01月24日 暂无评论 ... 技术 /

故障现象:

程序是使用 SpringBoot 整合 MyBatis 的,在idea下运行的时候没有任何问题,但是打包成 jar 包单独运行就出问题,不论是在 Windows 环境下还是在 Linux 环境下,都是一样,可以排除系统环境问题。主要的堆栈信息提取出来是如下:

Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'class path resource [mapper/]'; nested exception is org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 文件提前结束。

解决办法:

Spring Boot 的配置文件 application.properties 文件中的配置项 mybatis.mapper-locations 有问题,原本设置内容是:

mybatis.mapper-locations=classpath:mapper/**

将配置修改为,这里为了保险起见,将 MyBatis 的mapper文件夹的目录也修改了一下

mybatis.mapper-locations=classpath:mappers/*.xml

重新打包,打出来的包问题再没有重现。

所以新增一条遇到这个问题的解决方法:
从路径是否正确这方面来尝试一下。

遇到的坑:

搜索引擎搜索到的解决方案基本上有这样的解决思路:
1、文件头含有BOM,将XML文件另存为不带BOM的UTF-8格式可解决问题;
2、MyBatisGenerator工具额外生成了类似于 *.out.xml 后缀的文件,导致 MyBatis 启动时解析出问题;
3、MyBatis 没有留下配置文件,建立一个没有实际意义的“mybatis-config.xml”文件就能解决问题。(存疑,SpringBoot可以不设置Mybatis配置文件)

经过以上实践,并没有解决问题,也许是问题发生的条件不一样,反倒是类似的文章甚至一模一样的文章到处都是,垃圾信息简直太多。一个简单的问题浪费了这么多时间,除了自己个人经验有所欠缺之外,还有一方面就是这些重复抄袭的内容,让搜索问题的心态逐渐暴躁。特别编写这篇文章,如果你遇到类似的问题,希望给你提供一个全新的解决思路。

暂无评论

发布评论