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

开心一刻

昨晚跟我妈说语音

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

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

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

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

妈:你给我滚

然后她直接把语音给挂了

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

实践出结果

想快速知道答案,做法很简单,两个都设置好,看生效的是哪个

示例代码: druid-timeout

我们在原来的基础上改一下:加上这两个配置项,用单线程测试就行了

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

测试方式和之前一样,给 tbl_user 表加写锁

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

我们来看下花费的时长

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


结果很明了: JdbcTemplate 的 queryTimeout 生效

源码寻真相

想知道为什么,跟源码呗

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

我们重点看

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

通过方法名我们大致能猜到其作用,我们具体看 queryTimeout 相关的内容

con.createStatement()

大家仔细看,别跟丢了哦

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


可以看到看到此时 stmt.setQueryTimeout(queryTimeout) 设置的是 DataSource 的 queryTimeout ,也就是 7 秒

这里有个细节值得大家留意下

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

不是简单的将 DataSource 的 queryTimeout 赋值给 Statement

有兴趣的可以去看看 DataSource 的 transactionQueryTimeout 和 defaultAutoCommit 的相关源码,这里就不问了

applyStatementSettings(stmt)

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

可以看到,又重置成 JdbcTemplate 的 queryTimeout 了

至此,相信大家已经明了了

补充留疑问

假设配置了 queryTimeout ,思考如下三种情况

1、如果配置 transactionQueryTimeout

2、如果配置了 defaultAutoCommit 会出现什么情况

3、如果同时配置了 transactionQueryTimeout 和 defaultAutoCommit ,又会出现什么情况

总结

关于 queryTimeout ,相信大家已经清楚了(未考虑过 transactionQueryTimeout )

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

从源码可以看出, queryTimeout 配置项生效的过程还有其他配置项参与了逻辑,而非简单的直接赋值,大家可以琢磨下为什么这么实现

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章