Druid 查询超时配置的探究 → DataSource 和 JdbcTemplate 的 queryTimeout 到底谁生效?
开心一刻
昨晚跟我妈语音
妈:我年纪有点大了,想抱孩子了
我:妈,我都多大了,你还想抱我?
妈:我想抱小孩,谁乐意抱你呀!
我:刚好小区有人想找月嫂,要不我帮你联系下?
妈:你给我滚
然后她直接把语音给挂了
前情回顾
还记得记一次 Druid 超时配置的问题 → 引发对 Druid 时间配置项的探究遗留的问题吗?
如果同时设置 DataSource 的 queryTimeout 和 JdbcTemplate 的 queryTimeout ,那么哪个 queryTimeout 生效?
实践出结果
想快速知道答案,做法很简单,两个都设置,看生效的是哪个
示例代码:druid-timeout
我们在原来的基础上改一下:加上这两个配置项,用单线程测试就行了
测试方式和之前一样,给 tbl_user 表加写锁
我们来看下花费时长
结果很明了: JdbcTemplate 的 queryTimeout 生效
源码寻真相
想知道为什么,跟源码呗
我们重点看
通过方法名我们大致能猜到其作用,我们具体看 queryTimeout 相关的内容
con.createStatement()
大家仔细看,别跟丢了哦
可以看到看到此时 stmt.setQueryTimeout(queryTimeout) 设置的是 DataSource 的 queryTimeout ,也就是 7 秒
这里有个细节值得大家留意下
不是简单的将 DataSource 的 queryTimeout 赋值给 Statement
有兴趣的可以去看看 DataSource 的 transactionQueryTimeout 和 defaultAutoCommit 的相关源码,这里就不跟了
applyStatementSettings(stmt)
可以看到,又重置成 JdbcTemplate 的 queryTimeout 了
至此,相信大家已经明了了
补充留疑问
假设配置了 queryTimeout ,思考如下三种情况
1、如果配置 transactionQueryTimeout
2、如果配置了 defaultAutoCommit 会出现什么情况
3、如果同时配置了 transactionQueryTimeout 和 defaultAutoCommit ,又会出现什么情况
总结
关于 queryTimeout ,相信大家已经清楚了(未考虑 transactionQueryTimeout )
从源码可以看出, queryTimeout 配置项生效的过程还有其他配置项参与了逻辑,而非简单的直接赋值,大家可以琢磨下为什么这么实现
Druid 查询超时配置的探究 → DataSource 和 JdbcTemplate 的 queryTimeout 到底谁生效?的更多相关文章
- 记一次 Druid 超时配置的问题 → 引发对 Druid 时间配置项的探究
开心一刻 一天在路边看到一个街头采访 记者:请问,假如你儿子娶媳妇,给多少彩礼合适呢 大爷:一百万吧,再给一套房,一辆车 大爷沉思一下,继续说到:如果有能力的话再给老丈人配一辆车,毕竟他把女儿养这么大 ...
- Confluence 6 配置数据库查询超时时间
如果数据库的查询时间太长同时你的应用程序显示没有响应,你可以配置数据库的查询超时时间.在默认情况下 Confluence 没有超时时间.希望配置数据库查询超时时间,在你的测试服务器上进行下面的操作: ...
- DRUID连接池配置详情
DRUID介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针 ...
- SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)
1.概念:SpringBoot 整合 MyBatis 2.背景 SpringBoot 得到最终效果是一个简化到极致的 WEB 开发,但是只要牵扯到 WEB 开发,就绝对不可能缺少数据层操作,所有的开发 ...
- springboot中使用druid和监控配置
如果想要监控自己的项目的访问情况及查看配置信息,druid是一个很好的选择,可能你会问druid是什么?有什么用?优点是什么? Druid简介 Druid是阿里巴巴开源的数据库连接池,号称是Java语 ...
- spring boot +druid数据库连接池配置
1.启动应用入口修改 增加servlet注解 import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFacto ...
- 【转】spring boot使用Druid和监控配置
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012100371/article/details/76602612 Druid是Java语言中最好 ...
- 15、Spring Boot使用Druid和监控配置【从零开始学Spring Boot】
转载:http://blog.csdn.net/linxingliang/article/details/52001740目录(?)[-] 1添加Maven依赖 或jar包 2配置数据源相关信息 3 ...
- (15)Spring Boot使用Druid和监控配置【从零开始学Spring Boot】
Spring Boot 系列博客] 更多查看博客:http://412887952-qq-com.iteye.com/blog Spring Boot默认的数据源是:org.apache.tomcat ...
随机推荐
- 在GO中调用C源代码#基础篇1
开坑说明 最近在编写客户端程序或与其他部门做功能集成时多次碰到了跨语言的sdk集成,虽说方案很多诸如rpc啊,管道啊,文件io啊,unix socket啊之类的不要太多,但最完美的基础方式还是让程序与 ...
- Linux 设置开机自启动脚本(ES、MySQL、Nacos、Nginx)
/etc/rc.d/init.d 中文件会在 Linux 系统各项服务都启动完毕之后再被运行 cd /etc/rc.d/init.d:新建xxx.sh文件. chmod +x xxx.sh,赋予可执行 ...
- 流量治理神器-Sentinel 究竟是怎么做到让业务方接入简单?
大家好,我是架构摆渡人,这是流量治理系列的第10篇原创文章,如果有收获,还请分享给更多的朋友. 做业务开发,需要考虑业务的扩展性.做基础框架开发,需要考虑如何让业务方接入,使用简单,尽量不要耦合在业务 ...
- linux篇-centos7安装samba服务器
1查看是否安装samba服务 2如果为空则没有安装,安装显示安装完成即成功 3查看samba状态 4查看配置文件的位置 5配置文件备份,直接传输到本地备份 6修改配置文件 Path共享目录位置 Val ...
- 基于.NetCore开发博客项目 StarBlog - (8) 分类层级结构展示
系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...
- 二进制固件函数劫持术-DYNAMIC
背景介绍 固件系统中的二进制文件依赖于特定的系统环境执行,针对固件的研究在没有足够的资金的支持下需要通过固件的模拟来执行二进制文件程序.依赖于特定硬件环境的固件无法完整模拟,需要hook掉其中依赖于 ...
- 软件构造Lab1实验要点总结
本实验通过解决三个问题,训练了基本的Java编程技能,并给出了Eclipse+Jdk+Junit的配置方案,以及对使用git进行项目管理的方式. 1.因此,本实验的第一个要点是配置环境.具体配置环境过 ...
- linux运维基础1
内容概要 运维简介 运维岗位职责 服务器 服务器硬件介绍 磁盘阵列 虚拟化软件及环境 虚拟化软件 安装操作系统 Vmware虚拟机安装及相关配置流程 内容详情 运维简介 运维岗位职责 核心:运行维护应 ...
- android系统常见问题类型
android系统中常见的异常问题,包括上层应用.框架.内核.驱动等,一般来说有如下一些异常问题类型: ANR,Answer No Response,应用无响应. FC,Force Close,强制退 ...
- 华为云Stack首席架构师:打造“称手”的数字化工具,答好政企IT数字化转型这道必选题
摘要:数字化转型是一号位工程,数字化的工具本身就是企业的核心竞争力. 本文分享自华为云社区<华为云Stack首席架构师:打造"称手"的数字化工具,答好政企IT数字化转型这道必 ...