連線池鏈結超時

2021-07-26 18:57:23 字數 1682 閱讀 4746

資料庫連線池中的connection在八小時內沒有被用到,則會自動斷開連線,那麼怎麼處理資料庫連線超時的問題?

我的**:

public class connectionfacory

public static synchronized connectionfacorygetinstance(string filename)

return instance; }

public static void initpool(int connectioncount) }

public connection getconnection()

//從連線池中獲取乙個連線,獲取的時候,也獲取時間,儲存到另乙個連線池中

entryen =connectionpool.entryset().iterator().next();

conn = en.getkey();//獲取乙個connection物件。

connectionpool.remove(conn);//移除con物件

return conn; }

/* * 設定乙個定時器

*   每隔乙個小時監測一下connectionpool連線池中的連線個數

*   如果個數過少,建立新連線,如果個數過多,則移除連線.

*   還要保證連線是持續的,保證每8小時執行一次sql語句 */

public static void timer() }

/**

* 因為檢測到連線小於20個時,可能有些連線正在使用,會新增連線至20個。

* 當正在使用的連線已經使用完了,會歸還給連線池,這是連線池的數量會多於20個,所以要刪除多餘的連線,這樣保證連線的數量動態平衡。

* 移除時盡量移除長時間不使用的連線 *

*/if(size > 20) }

//鏈結8小時後就會關,所以八小時內就要使用一次,而且再次執行會判斷用不用! /*

* 判斷前連線是否八小時內被執行過,

* 如果執行過,那麼不用管,

* 如果沒有被執行過,那麼執行一天sql語句,確保連線不會關閉。

* 乙個大的連線池,用來儲存總的連線數。

* 將使用的連線使用時,儲存到另乙個連線中

* 但是怎麼確保連線的時間呢? */

//遍歷這連線池中所有的連線,檢視每個連線用的時間,如果時間7個小時沒有用了,那麼使用一次

/*** 每次得到當前時間,計算出時間差,超過7小時沒有使用,就使用一次。 */

/* * 定義乙個map集合,用於存放con和是否被修改的變數

* 為什麼要不直接把這個connection重新加入到map中,而要重新定義這個變數?

* 因為map集合在遍歷的時候不能修改集合,否則會出現異常。 */

mapconmap = new hashmap();

/* * for迴圈遍歷的時候不能修改集合元素的內容。 */

for (entryen : connectionpool.entryset()) catch(sqlexception e) }

conmap.put(false,con); }

/* * 遍歷conmap,如果是false那麼取得con,再次存入connectionpool中 */

for (entryen : conmap.entryset()) }

}}, 0, 60 * 1000); }

}

連線池超時解決辦法

最近折騰了jpa後,接下來就會發現乙個大的問題,就是mysql在連線8個小時後,會自動的釋放連線。這個時候持久層用的連線池就會報錯了,頭疼的要死,後來找了一堆資料,看了下,只有乙個辦法,設定資料庫連線的閒置時間,然後在連線池這一層做反閒置設定,意思就是在連線閒置以前先釋放掉這個連線。就不會出現問題了...

MySQL連線池與超時設定

func setmaxidleconns n int func setmaxopenconns n int 寫乙個網路後端,啟動資料庫,連線資料庫,開始之前配置你的資料庫.流量一大,各種問題都出來了,你開始認識到mysql是一整套系統,一套需要配置的系統.以上兩個函式是什麼?什麼是mysql連線,什...

鏈結阿里連線池(listof)

使用 public static void main string args catch exception e jdk9的新特性 list介面,set介面,map介面 裡邊增加了乙個靜態的方法of,可以給集合一次性新增多個元素 static list of e.elements 使用前提 當集合中...