【Mysql】mysql查询超时JDBC源码浅析
来源:互联网 发布:php websocket 客户端 编辑:程序博客网 时间:2024/06/06 00:31
前言
本文讨论的源码是基于connectorJ 5.1.37,最新版的jar包是5.1.38,两者对于该处的逻辑并无差别。
connectorJ MySQL官网下载地址:点击打开链接(http://dev.mysql.com/downloads/connector/j/)
一、JDBC API支持
Java.sql.Statement中定义的查询超时规范:
JDBC规范中的执行对象关系——CallableStatement extends PreparedStatement extends Statement,因此setQueryTimeout均可以支持。
二、JDBC实现源码浅析
三、Mysql对超时的支持
整个JDBC规范及其实现中,将java与mysql联系到一起的是connection对象,实际上jdbc操作也是一种RPC,java应用远程调用mysql应用,通过jdbc协议进行通信。而JDBC协议(jdbc:mysql://xxxx/3306/database,主协议是jdbc,副协议是mysql)基于socket,在connection.connect(url, properties)的逻辑中通过反射connection实现类的构造函数实例化MysqlIO对象,此时会进行socket通信和握手协议,失败则JDBC异常。
扯远了,回到Mysql对超时的技术支持。
参见mysql官方文档中关于kill query的内容:13.7.6.3 KILL Syntax
对应的中文翻译:点击打开链接
其中关注两个点,指令语法和指令含义。
1. 语法
2. 含义
3. 注意
需要注意的是,KILL QUERY指令并不会关闭当前连接,而只是结束当前连接的操作,否则连接池在超时机制下就没什意义了。
四、总结
JDBC中查询超时的逻辑:
1. 在进行查询操作的时候启动定时器,超时则调用CancelTask;
2. 在CancelTask中,java应用通过jdbc协议对mysql服务器进行RPC,调用mysql “KILL QUERY”指令结束当前连接执行的操作;
3. 如果在执行完query操作还没有超时,则取消CancelTask,否则CancelTask在超时后RPC “KILL QUERY";
附注:
本文写的过于简单,乘中午休息时间不睡觉匆忙写了写,有些地方不详细,如有错漏,还请不吝指正,谢谢!
- 【Mysql】mysql查询超时JDBC源码浅析
- 【Mysql】mysql查询超时JDBC源码浅析
- Mysql jdbc driver源码浅析(一)
- 中间件查询-MySql--设置超时
- mysql jdbc Statement查询
- jdbc连接MySql查询
- mysql-JDBC源码解析
- Mysql查询优化器浅析
- MySQL查询优化器浅析
- Mysql查询优化器浅析
- MYSQL超时连接问题(com.mysql.jdbc.MysqlIO.readFully)
- mysql数据库连接超时com.mysql.jdbc.exceptions.jdbc4.CommunicationsException问题
- MySQL系列之源码浅析
- JDBC-mysql,查询数据库信息
- 【原创】PHP访问MySQL查询超时处理
- PHP访问MySQL查询超时处理
- PHP访问MySQL查询超时处理
- PHP访问MySQL查询超时处理
- RXJava——创建 Observable
- react入门——实现一个输入框组件
- css中的clip属性rect(top,right,bottom,left);
- shell 中变量的介绍
- new/delete 和malloc/free 的区别一般汇总
- 【Mysql】mysql查询超时JDBC源码浅析
- Appium移动自动化测试(四)--先跑起来再说(第一个测试用例-手机YY)
- hello csdn blog
- 写点东西,关于比特币的安全设计:
- 深入Windows窗体原理及控件重绘技巧
- RXJava——Subscribe (订阅)
- 从eclipse到Intellij IDEA
- 正则表达式的认识
- 朴素贝叶斯分类