第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

H2中如何防止validationQueryTimeout影響其他SQL語句

H2中如何防止validationQueryTimeout影響其他SQL語句

青春有我 2023-03-09 11:02:11
我正在使用由 H2 1.4.199 數(shù)據(jù)庫支持的 Dropwizard 1.3.12。在我的數(shù)據(jù)庫配置中database:  ...  validationQuery: "/* MyService Health Check */ SELECT 1"  validationQueryTimeout: 3s  ...我遇到的問題是 3 秒的超時也會傳播到 Dropwizard 應用程序中完成的真實數(shù)據(jù)庫查詢。某些數(shù)據(jù)庫查詢被此超時中斷。我寧愿讓他們多等一會兒。從我的理解validationQueryTimeout應該只控制超時validationQuery。在應用程序內(nèi)部完成的真實數(shù)據(jù)庫請求不應受此影響。我試過刪除validationQueryTimeout,這似乎可以解決問題并刪除查詢超時。這樣做我認為是最后的解決方法,因為我認為在從連接池獲取連接時驗證連接已啟動并正在運行的查詢超時是有意義的。我嘗試使用 Postgresql,但似乎validationQueryTimeout不會影響其他數(shù)據(jù)庫查詢。我已經(jīng)進行了一些調(diào)試,并認為我找到了原因,但我缺乏一個好的解決方法。在執(zhí)行驗證時,tomcat-jdbc 在驗證語句上設置查詢超時。 https://github.com/apache/tomcat/blob/9.0.16/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java#L536-L544            stmt = connection.createStatement();            int validationQueryTimeout = poolProperties.getValidationQueryTimeout();            if (validationQueryTimeout > 0) {                stmt.setQueryTimeout(validationQueryTimeout);            }            stmt.execute(query);            stmt.close();這里的大問題是 H2 將超時保持在連接級別而不是語句級別。https://github.com/h2database/h2database/blob/version-1.4.199/h2/src/main/org/h2/jdbc/JdbcStatement.java#L695-L717    /**     * Sets the current query timeout in seconds.     * Changing the value will affect all statements of this connection.     * This method does not commit a transaction,     * and rolling back a transaction does not affect this setting.     *     * @param seconds the timeout in seconds - 0 means no timeout, values     *        smaller 0 will throw an exception     * @throws SQLException if this object is closed     */有什么我可以做的嗎?或者 h2 或 tomcat-jdbc 是否需要修復?我能想到的是在為驗證查詢設置當前查詢超時值之前獲取 tomcat-jdbc 中的當前查詢超時值,然后在運行驗證查詢后將其設置回該值。
查看完整描述

1 回答

?
拉丁的傳說

TA貢獻1789條經(jīng)驗 獲得超8個贊

沒錯,這是 H2 的一個已知限制(請參閱此處此處

我想您可以將超時設置為 0 以避免 H2 的錯誤行為。然后實現(xiàn)一個JdbcInterceptor語句執(zhí)行后檢查超時的方法。但是,當它違反超時時它不會中止語句只會在之后報告異常:-(


查看完整回答
反對 回復 2023-03-09
  • 1 回答
  • 0 關(guān)注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號