回想那天让我虎躯一震的bug:Mybatis Ognl引起的异常

最近线上项目的关键环节突然抛出了一个数据库访问的空指针异常,不免神经一紧,经过最终排查,确认了该问题属于mybatis 3.3.0(不包含)以下版本已存在的bug,新版本的mybatis已经修复,具体情况如下:
系统jar版本
在这里插入图片描述
异常堆栈
在这里插入图片描述

排查过程

  1. 根据堆栈信息,初步确定是mybatis的解析执行异常,通过搜索引擎进一步查证,该问题属于mybatis低版本中存在的并发bug,问题发生时也确实存在多个线程并发访问同一sql
    在这里插入图片描述
    需进一步确认具体原因。
  2. 由于之前对mybatis执行过程中mapper文件中定义的mappedStatement的sql语句的解析构建及参数绑定了解不够充分,故结合日志中的异常sql语句,在dev环境进行模拟,熟悉执行流程:

项目启动阶段进行mapper文件的解析,构建XML的结构化对象

org.apache.ibatis.builder.xml.XMLStatementBuilder#parseStatementNode解析statement, 并将结果维护在org.apache.ibatis.session.Configuration 的statementMap<statementId, statement>中,用于sql执行时依据statementId获取对应的statement
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值