昨晚跟我媽語音
媽:我年紀有點大了,想抱孩子了
我:媽,我都多大了,你還想抱我?
媽:我想抱小孩,誰樂意抱你呀!
我:剛好小區有人想找月嫂,要不我幫你聯絡下?
媽:你給我滾
然後她直接把語音給掛了
測試方式和之前一樣,給 tbl_user 表加寫鎖
我們來看下花費時長
結果很明瞭: JdbcTemplate 的 queryTimeout 生效
想知道為什麼,跟原始碼唄
我們重點看
通過方法名我們大致能猜到其作用,我們具體看 queryTimeout 相關的內容
大家仔細看,別跟丟了哦
可以看到看到此時 stmt.setQueryTimeout(queryTimeout) 設定的是 DataSource 的 queryTimeout ,也就是 7 秒
這裡有個細節值得大家留意下
不是簡單的將 DataSource 的 queryTimeout 賦值給 Statement
有興趣的可以去看看 DataSource 的 transactionQueryTimeout 和 defaultAutoCommit 的相關原始碼,這裡就不跟了
可以看到,又重置成 JdbcTemplate 的 queryTimeout 了
至此,相信大家已經明瞭了
假設設定了 queryTimeout ,思考如下三種情況
1、如果設定 transactionQueryTimeout
2、如果設定了 defaultAutoCommit 會出現什麼情況
3、如果同時設定了 transactionQueryTimeout 和 defaultAutoCommit ,又會出現什麼情況
關於 queryTimeout ,相信大家已經清楚了(未考慮 transactionQueryTimeout )
從原始碼可以看出, queryTimeout 設定項生效的過程還有其他設定項參與了邏輯,而非簡單的直接賦值,大家可以琢磨下為什麼這麼實現