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

  本篇文章为你整理了Druid 查询超时配置的探究 → DataSource 和 JdbcTemplate 的 queryTimeout 到底谁生效?()的详细内容,包含有 Druid 查询超时配置的探究 → DataSource 和 JdbcTemplate 的 queryTimeout 到底谁生效?,希望能帮助你了解 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 查询超时配置的探究 → DataSource 和 JdbcTemplate 的 queryTimeout 到底谁生效?的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: