Druid 查询超时配置的探究 → DataSource 和 JdbcTemplate 的 queryTimeout 到底谁生效?

java 文章 2022-07-25 09:20 4975 0 全屏看文

AI助手支持GPT4.0

开心一刻

  昨晚跟我妈语音

  妈:我年纪有点大了,想抱孩子了

  我:妈,我都多大了,你还想抱我?

  妈:我想抱小孩,谁乐意抱你呀!

  我:刚好小区有人想找月嫂,要不我帮你联系下?

  妈:你给我滚

  然后她直接把语音给挂了

前情回顾

  还记得记一次 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 配置项生效的过程还有其他配置项参与了逻辑,而非简单的直接赋值,大家可以琢磨下为什么这么实现

-EOF-

AI助手支持GPT4.0


国内超级便宜服务器

摸鱼人热门新闻聚合

钻级赞助商 我要加入

开发者在线工具

第三方支付技术请加QQ群

相关文章
Java语言中的"异常"详解
HttpClient如何进行文件上传呢?
面试官必问的 3 道 MQ 面试题,还有谁不会??
@PostConstruct注解简介说明
非常全的日期格式
随便看看
怎么添加小程序支付功能? 4525
教育科技公司申请微信支付被拒绝? 4810
微信公众号免300认证教程 5901
小程序已经上线,作为管理员无法在小程序数据助手查看数据? 5308
小程序广告组件通过审核,但是小程序内没有显示广告? 5080
企业微信通讯录账号被管理员误/恶意删除,怎么办? 9582
问题? 9061
如何快速搭建抽奖助手小程序(无需代码知识) 6188
许涛 大哥在吗, 要解冻小程序的时候提示信息主体不一致, 能帮忙看下吗? 7481
小程序搜一搜全称搜索不显示 麻烦解决一下!谢谢 6802