异常排查:lineNumber: 1; columnNumber: 590; 元素内容必须由格式正确的字符数据或标记组成。

文章目录

  • 异常排查
  • 总结

今天应用服务启动式,出现一个异常lineNumber: 1; columnNumber: 589; 元素内容必须由格式正确的字符数据或标记组成。,经过一步步排查总算解决问题了。

异常排查

应用服务启动时,堆栈如下:
异常排查:lineNumber: 1; columnNumber: 590; 元素内容必须由格式正确的字符数据或标记组成。_第1张图片

从堆栈我们可以发现JobPoolDeliveryMapper 这个类中xml中有不符合xml的语法错误。然后我们把断点设置到这个org.apache.ibatis.parsing.XPathParser#createDocument 这个方法中,断点如下,然后重新启动应用服务发现堆栈。
异常排查:lineNumber: 1; columnNumber: 590; 元素内容必须由格式正确的字符数据或标记组成。_第2张图片
从异常信息中我们发现异常引起的动态SQL如下:
异常排查:lineNumber: 1; columnNumber: 590; 元素内容必须由格式正确的字符数据或标记组成。_第3张图片
然后如上图,找到这个str字符串,找到字符,展开找到590个字符,发现在 <> 附近引起。
异常排查:lineNumber: 1; columnNumber: 590; 元素内容必须由格式正确的字符数据或标记组成。_第4张图片
这时候我们找到原始的SQL

@Select("")
    List<JobProxyTaskCountBO> listJobProxyTaskCount(@Param("jobPoolIds") List<Long> jobPoolIds);

猜测是<> 这个查询过滤条件有问题,然后增加上 转义标签

0]]>,然后重启项目解决。

总结

如上是一个排查思路,通过定位对应的mapper,然后进而定位到某个sql,进而定位到引起异常某个字符串附近,最终通过定位排查解决问题。

你可能感兴趣的:(MySQL,java,数据库,sql)