mybatis线上问题查找
来源:互联网 发布:ddos网络攻击 编辑:程序博客网 时间:2024/06/03 05:07
线上反映查不到数据,根据业务逻辑把sql找出来执行,实际是有数据的。不知道什么原因,记录一下查找问题过程。
greys查找问题
greys对查找线上问题还是挺有帮助的,地址https://github.com/oldmanpushcart/greys-anatomy
进入greys
首先通过jps查到Java进程ID
sudo jps -l
切换到jetty账号,执行greys脚本进入
sudo su - jetty
sh greys.sh 16092
查看调用参数
ga?>watch -b com.dfire.soa.order.dao.ITotalPayDAO selectTotalPayCountInfo params[1]+’|’+params[2]
Press Ctrl+D to abort.
Affect(class-cnt:2 , method-cnt:4) cost in 228 ms.
Thu Oct 26 00:00:00 CST 2017|Sat Oct 28 00:00:00 CST 2017
Thu Oct 26 00:00:00 CST 2017|Sat Oct 28 00:00:00 CST 2017
Thu Oct 26 00:00:00 CST 2017|Sat Oct 28 00:00:00 CST 2017
Thu Oct 26 00:00:00 CST 2017|Sat Oct 28 00:00:00 CST 2017
Thu Oct 26 00:00:00 CST 2017|Sat Oct 28 00:00:00 CST 2017
确定没问题
查看返回参数
ga?>watch -s *Mapper selectTotalPayCountInfo returnObj -x 1
Press Ctrl+D to abort.
Affect(class-cnt:2 , method-cnt:2) cost in 341 ms.
null
发现返回参数是null,返回值有问题
问题定位
从SQL看没问题,但是查看类型是TotalPayPo,
<select id="selectTotalPayCountInfo" resultType="com.dfire.soa.order.domain.po.TotalPayPo">
返回实际类型需要TotalPayCount
TotalPayCount selectTotalPayCountInfo(@Param("entityId") String entity, @Param("currDate") Date currDate, @Param("twoDayAgo") Date twoDayAgo, @Param("isHide") Integer isHide);
这个地方mybatis居然没有报错,不可思议
查看mybatis源码才发现问题出现在DefaultResultSetHandler类的处理上,这个类负责对返回的数据进行组装转换,其中getRowValue方法中foundValues没有找到直接返回null了。感觉这里不合理,应该抛出异常,至少这里应该能够配置,不然这种配置错误不能及时被发现。
private Object getRowValue(ResultSetWrapper rsw, ResultMap resultMap) throws SQLException { final ResultLoaderMap lazyLoader = new ResultLoaderMap(); Object resultObject = createResultObject(rsw, resultMap, lazyLoader, null); if (resultObject != null && !typeHandlerRegistry.hasTypeHandler(resultMap.getType())) { final MetaObject metaObject = configuration.newMetaObject(resultObject); boolean foundValues = resultMap.getConstructorResultMappings().size() > 0; if (shouldApplyAutomaticMappings(resultMap, !AutoMappingBehavior.NONE.equals(configuration.getAutoMappingBehavior()))) { foundValues = applyAutomaticMappings(rsw, resultMap, metaObject, null) || foundValues; } foundValues = applyPropertyMappings(rsw, resultMap, metaObject, lazyLoader, null) || foundValues; foundValues = lazyLoader.size() > 0 || foundValues; resultObject = foundValues ? resultObject : null; return resultObject; } return resultObject; }
注:mybatis-3.2.7
- mybatis线上问题查找
- 线上问题
- 线上操作与线上问题排查实战
- 线上操作与线上问题排查实战
- 线上操作与线上问题排查实战
- 线上操作与线上问题排查实战
- 线上操作与线上问题排查实战
- 排查线上问题
- 解决线上问题办法
- 线上问题排查
- 线上环境部署问题
- 线上问题处理
- 线上问题集锦
- 线上学习问题答疑
- JVM线上问题排查
- 线上应用问题排查
- nginx线上问题记录
- 线上问题记录
- opencv学习——利用轮廓画矩阵、外接圆、拟合曲线
- 算法
- 操作系统笔记:书Page188第50题
- 《每日练习》
- xml从入门到精通之xml文件和java文件的转化
- mybatis线上问题查找
- Learning Python Part IV 之类和面向对象
- hdu3853[LOOPS] 继续浅尝期望概率DP
- NOIP模拟(10.30)T2 Game
- opencv学习——计算掩模及目标远点
- bzoj 2120 数颜色 【带修改莫队模板】
- 【codevs 6162】Meronri爬楼梯
- SpringCloud学习笔记(一)
- xian 区域赛 g bzoj 4017: 小Q的无敌异或