国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

超時時間已到,但是尚未從池中獲取連接異常捕獲及解決辦法

在使用連接池進行數據庫連接時,我們經常會遇到"超時時間已到,但是尚未從池中獲取連接"這個異常。雖然這個異常很難復現,但我們希望能夠全局捕獲該異常,并給出一個友好的提示。但問題是,我們不清楚這個異常屬于哪種類型,有些人說它屬于InvalidOperationException異常。因此我想請教各位大佬們是否有更好的解決辦法。

首先,讓我們來看一下對應的英文錯誤信息:

Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

然而,即使在極端情況下,這種情況仍然會發(fā)生?,F在,我們只是想攔截這個異常并給出一個友好的提示。一種解決辦法是通過Exception.Message進行攔截。

下面是一個示例代碼,展示了如何在全局捕獲該異常并給出友好提示:

示例代碼

public class Sg1ExceptionFilterAttribute : ExceptionFilterAttribute{    public override void OnException(HttpActionExecutedContext actionExecutedContext)
    {        if (actionExecutedContext.Exception is InvalidOperationException || actionExecutedContext.Exception is Sq1Exception)
        {
            actionExecutedContext.Response = actionExecutedContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "請稍后重試");
        }        
        base.OnException(actionExecutedContext);
    }
}

通過繼承ExceptionFilterAttribute類,我們可以自定義異常過濾器來捕獲特定類型的異常。在上述代碼中,我們判斷異常是否屬于InvalidOperationException或Sq1Exception,如果是,則將響應設為一個帶有"請稍后重試"消息的錯誤響應。最后,調用基類的OnException方法,以確保異常繼續(xù)傳播到其他可能的異常處理程序。

這種方式能夠有效地捕獲并處理該異常,同時給用戶提供了一個友好的提示信息,讓他們知道發(fā)生了連接池超時的情況,并建議稍后重試。

總結一下,對于"超時時間已到,但是尚未從池中獲取連接"這個異常,我們可以通過編寫一個自定義的異常過濾器來全局捕獲并處理該異常。這樣能夠提供更好的用戶體驗,并提示用戶稍后重試。同時,我們也提供了一種通過攔截Exception.Message的解決辦法。

解決思路

一、看所有open的連接是否都close了。

二、如果訪問量很大,加上Max Pool Size=512這一句,當然這是要以損失系統(tǒng)性能為代價的! 這樣以后一定可以解決你的問題!

解決方案

解決方案一

我想原因可能是并發(fā)操作。DataReader是獨占連接的,就是說你的程序可能設計上有問題。比如說最大連接設100,假設有100個人同時使用 DataReader正在讀取數據庫內容,那么當第101人讀取的時候,連接池中的連接已經沒有了,就會出現上面的錯誤。DataReader是獨占連接 的,每個DataReader都要占用一個連接。當然這個情況是偶爾出現的,所以會很長時間出現一次,因為只有同時有超過連接池最大連接數量的并發(fā)操作才會發(fā)生。而且你加大并發(fā)數量只能暫時緩解問題,如果你加大到200個并發(fā)連接,如果有201 人同時操作怎么辦?你說了你使用Connection對象的Close()方法,這是不行的,因為Close()方法僅僅是關閉連接,但這個連接沒有釋放,還是被這個對象占用,要釋放必須使用Connection的Dispose()方法顯式釋放連接才可以,否則這個對象占用的連接只能等到垃圾收集的情 況下才能被釋放。這種情況肯定會出現“超時時間已到”的錯誤。

解決方法

解決方案一

  1. 修改幾個關鍵頁面或訪問比較頻繁的數據庫訪問操作,使用DataAdapter和DataSet來獲取數據庫數據,不要使用DataReader。

  2. 在訪問數據庫的頁面上使用數據緩存,如果頁面的數據不是經常更新(幾分鐘更新一次)的話,使用Cache對象可以不用訪問數據庫而使用緩存中的內容,那么可以大大減少連接數量。

  3. 修改代碼,把使用Connection對象的地方都在Close()后面加上Dispose()調用。

  4. 建議對數據庫操作進行大的修改,建立自己的數據庫操作代理類,繼承

System.IDisposable接口,強迫釋放資源,這樣就不會出現連接數量不夠的問題了。

解決方案二

WEB.config 里面:在數據庫連接加 Max Pool Size = 512;server=local;uid=;pwd=;database=2004;Max Pool Size = 512;">一勞永逸。 解決方案三

估計是連接(Connection)對象沒有Close。倒是不必Dispose,而DataReader用完后應該關閉,但不關閉也沒問題,只是不關閉的話此連接對象就一直不能用,只要你最終關閉了連接對象就不會出問題。 連接對象在Open后的操作都放在try塊中,后面跟一個finally塊:conn.Close();文章來源地址http://www.zghlxwxcb.cn/article/646.html

到此這篇關于超時時間已到,但是尚未從池中獲取連接異常捕獲及解決辦法的文章就介紹到這了,更多相關內容可以在右上角搜索或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

原文地址:http://www.zghlxwxcb.cn/article/646.html

如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請聯系站長進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • mysql Dbeaver連不上(連接數據庫超時connect time out),但是navicat能連上

    mysql Dbeaver連不上(連接數據庫超時connect time out),但是navicat能連上

    mysql Dbeaver連不上,但是navicat能連上 現象:連接超時 方案1: 在dbeaver安裝目錄找到dbeaver.ini添加一行 若方案1改完連接報這個錯時 修改連接方式為URL 并帶上useUnicode=true參數

    2024年02月04日
    瀏覽(29)
  • python requests設置連接超時時間

    這段代碼的主要作用是使用requests庫發(fā)出一個GET請求,并設置連接超時時間為5秒鐘,讀取超時時間為10秒鐘。 如果請求超時,就會拋出requests.exceptions.Timeout異常,并在\\\"except\\\"語句塊中進行處理。如果發(fā)生其他類型的錯誤,如連接錯誤,就會拋出requests.exceptions.ConnectionError異常,

    2024年02月13日
    瀏覽(46)
  • ssh連接linux終端超時時間設置

    ? ? ? ? 當終端通過ssh連接服務器時,如果長時間不操作,終端就會超時而掉線,需要斷開ssh重新連接,如果超時時間過短的話,需要頻繁的連接終端。 ? ? ? ? 解決方法也很簡單,在ssh的配置文件sshd_config中重新設置一下客戶端的激活參數就行。ssh配置存在位置 : 修改過

    2024年02月10日
    瀏覽(55)
  • 設置服務器ssh遠程連接時超時關閉的時間

    設置服務器ssh遠程連接時超時關閉的時間

    我們通過ssh遠程連接服務器時,如果一段時間客戶端沒有使用,就會與服務器斷開連接。這個斷開的時間我們是可以自己的設置的。 以linux centos系統(tǒng)為例, 具體設置方法如下: 找到下面兩行 ClientAliveInterval:表示服務器每隔多少時間發(fā)送一次請求給客戶端,單位為s ClientAl

    2024年02月15日
    瀏覽(17)
  • springboot配置http連接超時時間主動斷開避免產生大量close_wait

    與客戶端聯調接口,通信方式使用http連接,客戶端設置了發(fā)起請求后10s就斷開連接,然后果不其然,我在服務端這邊收到了大量的close_wait狀態(tài),最終導致接口不可用。 close_wait產生的原因就是客戶端斷開了連接但是沒有發(fā)FIN給到服務端,所以服務端不知道還一直在跟客戶端通

    2024年02月16日
    瀏覽(22)
  • easy Connect連接成功,但是虛擬IP地址獲取失敗,而導致網頁無法打開

    easy Connect連接成功,但是虛擬IP地址獲取失敗,而導致網頁無法打開

    問題:easy Connect連接成功,但是虛擬IP地址獲取失敗,而導致網頁無法打開 1.右鍵點開easy Connect,選連接狀態(tài) 出現下面頁面,虛擬Ip地址為0.0.0.0,即為虛擬IP地址獲取失敗 2.檢查Sangfor的網絡適配器是否有黃色感嘆號 ??右擊此電腦,選擇屬性,選設備管理器,檢查網絡適配器

    2024年02月09日
    瀏覽(16)
  • 什么是 MySQL JDBC 連接池中最高效的連接檢測語句?

    什么是 MySQL JDBC 連接池中最高效的連接檢測語句?

    在回答這個問題之前,首先我們看看 MySQL 中有哪些常用的 JDBC 連接池: c3p0 DBCP Druid Tomcat JDBC Pool HikariCP 這些連接池中,c3p0 是一個老牌的連接池,很多流行框架,在其老版本中,都將 c3p0 作為默認的連接池。 DBCP 和 Tomcat JDBC Pool(Tomcat 的默認連接池)是 Apache 開源的。 Druid

    2024年02月04日
    瀏覽(19)
  • Mac之SSH連接常用設置-延長連接的超時時間、給‘ssh 用戶名@IP地址‘指令起別名等

    Mac之SSH連接常用設置-延長連接的超時時間、給‘ssh 用戶名@IP地址‘指令起別名等

    Mac 的終端可以直接使用 SSH命令連接遠程服務器 ,但是默認情況下連接保持會話的時間很短,需要不斷地重新登陸,麻煩;下面可以通過增加 SSH 連接的會話超時時間來解決此問題。相關配置如下: Mac 下使用 SSH命令連接遠程服務器 時,每次需要輸入 ssh 用戶名@IP地址 ;可以針

    2024年02月05日
    瀏覽(24)
  • 若依框架 - 短時間內斷開連接,重復跳轉至登錄界面問題的解決方法(docker 與 redis)、令牌超時問題

    在很短的時間內不去操作系統(tǒng),就會自動提示, 登錄狀態(tài)已過期,您可以繼續(xù)留在該頁面,或者重新登錄 ,所以老是要跳轉到登錄界面,這一點很麻煩,非常影響用戶體驗。 令牌設置超時時間,過于短暫; redis 服務的啟動配置文件有問題,沒有配置密碼登錄,而是默認配置

    2024年02月13日
    瀏覽(20)
  • windows“你尚未連接代理服務器可能有問題”解決方法

    windows“你尚未連接代理服務器可能有問題”解決方法

    打開控制面板的方法: 1.從任務欄搜索 單擊Windows 10任務欄上的搜索按鈕。 在搜索框中輸入“控制面板”,然后單擊頂部的搜索結果。 2.從運行對話框中打開控制面板 按Windows + R快捷鍵。 在輸入框中輸入“控制面板”(你也可以只輸入control)。 按“確定”按鈕。 3.用在命令

    2024年02月04日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包