| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 上线到凌晨4点半 pagehelper的bug? -> 正文阅读 |
|
[大数据]上线到凌晨4点半 pagehelper的bug? |
大家好,我是烤鸭: ????上上周末上线到凌晨4点半,哭了,没想到问题竟然如此简单。最近又懒惰了,写了开头就一直放着了,今天终于补上。 ? 问题日志
奇怪的是报错的语句并没有使用分页插件,只是一个简单的查询。 原因猜想遇到问题第一时间回滚之后就好了,说明问题出现在这次提交。 跟pagehelper有关。
问题复现最后发现确实有个地方,写法是这样的。 由于项目拆分,把原来直接查库的地方改成了http调用,但是改写的人并没有关注业务逻辑,导致分页代码没有注释。(虽然注释了也不对,http改写的方法也没支持分页参数)
就这样分页在当前的线程没有使用,当这个线程执行别的Sql 查询的时候,就会有问题,具体看下下面的源码分析。 源码分析我们的数据库是SqlServer,Mysql和SqlServer的分页实现是不一样的。 下面的演示项目里分别模拟了不同的场景。 主要还是看下分页和SqlServer的实现源码。 分页插件整个核心代码是在 PageInterceptor 这个拦截器里。 执行 PageHelper.startPage(pageNum,pageSize); 时会将分页参数放到TheadLocal里。 PageMethod
finally里执行的AfterAll()代码就是在执行之后清空 ThreadLocal
复现SqlServer报错信息: Mysql的查询时也会报limit的错 SqlServerParser,报错语句出现在这 根据源码看到会先生成这样的语句,再根据传入的number和size进行替换
上面的源码是针对SqlServer分页时的,其实打个断点跟一下就行。 演示项目地址https://gitee.com/fireduck_admin/pagehelper-maggie-demo 总结为什么这个问题会折腾到4点,测试环境和本地环境都没有复现,其中一个主要原因就是流量不够,可能一两个报错信息会被忽略,导致排查问题难度加大。 再加上不是测试回归的重点,以后针对上线的代码还是要加强验证。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 4:31:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |