資料庫連線池中的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 使用前提 當集合中...