數據庫連接池自動重新連接問題


2006年08月28日 23:03:00

http://sailorls.blogchina.com/2606862.html                 
tomcat連接池自動重新連接問題- -
Tag: Tag    tomcat    連接池    重新連接                          
在以往的開發中,常常遇到tomcat連接池斷掉后(比如網絡斷線),無法自動重新連接,導致數據庫連接始終無效,今天發現此問題的一個解決方案。
首先,在連接池的配置中(XXX.XML),DB的url后加上參數,如sqlserver的加;autoReconnect=true,這是自動重連的基礎保證。
其次,一定要在tomcat中拋出連接異常,這一點很重要。一般我們的連接都會用class封裝起來,一場也會在class中捕獲,並處理掉,這樣會導致連接無法自動恢復。估計tomcat所帶的dbcp連接池的重連機制是捕獲tomcat中拋出的連接異常再重新連接,所以,連接異常一定要被拋出而不是自行處理掉。否則連接池會無法重新連接。
所以,實現tomcat自帶連接池dbcp自動重連的解決方案是,1。加上autoReconnect=true的參數  2。連接異常要被拋出

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=123&threadID=6653&tstart=1500
數據庫連接池自動恢復問題.詳情在內容里. 

我現在做一個項目.其中使用兩個oracle,中間共享一個數據庫.庫文件在磁盤陣列中.我現在是創建兩個連接池.分別用thin的方式連接.然后用multipool將兩個連接池做load-balance.但現在有個問題.我想實現當兩個數據庫都down掉.再重起時.我的程序可以直接用.不用重起weblogic.可是weblogic卻不這樣.當數據庫down掉后再重起.weblogic連接池顯示還是報錯.我看有的資料用testtable.我也設了.刷新周期也設了.可是不好使了.版本或哪位大哥有什么方法了.能否詳細告知一下.謝謝了.另有,我的weblogic是做集群.Test Table Name:測試表名

Init SQL:初始化SQL語句 如:select * from 測試表名

請問如何設置"Init SQL:初始化SQL語句 如:select * from 測試表名"

我記得原先回答過一個類似的問題。設定3個地方:
1。TestConnectionsOnReserve  : true
2。RefreshMinutes parameter  : 設定connection pool的刷新時間
3。Test Table Name : Dual

http://csdn.eyeah.cn/3116/1110/1127/112835571.html

比如對於c3p0來講,acquireRetryAttempts這個參數,如果>0就是你指定的連接次數,如果<0則表示無限制的連接。
 
增加配置文件c3p0.properties
增加配置項如下:
#Defines how many times c3p0 will try to acquire a new Connection from the database 
#before giving up. 
#If this value is less than or equal to zero, c3p0 will keep trying to fetch a Connection 
#indefinitely.
acquireRetryAttempts=60
#Milliseconds, time c3p0 will wait between acquire attempts.
acquireRetryDelay=60000
#If true, a pooled DataSource will declare itself broken and be permanently closed if a 
#Connection cannot be obtained from the database after making acquireRetryAttempts to 
#acquire one.
#If false, failure to obtain a Connection will cause all Threads waiting for the pool to
# acquire 
#a Connection to throw an Exception, but the DataSource will remain valid, and will 
#attempt to 
#acquire again following a call to getConnection(). 
breakAfterAcquireFailure=false
 
scud 寫道:
huazii 寫道:
正如樓上所言 
據我所致common.dbcp好像不支持


dbcp也有一個 validationQuery ,難道不行嗎? 

哪里寫着不支持哪?

哦 果然 謝謝指教。
 
 
好些日子沒到論談了,有這么多回貼,謝謝大家指教。 
不過我可能沒有表達清楚,首先數據庫和服務器不在一台機器上,所以如: jdbc:oracle:thin:@localhost:1521:database 這樣的是不行的。應該是 
: jdbc:oracle:thin:@ip:1521:database 問題是網絡終斷,比如:將網絡禁用。 
在數據庫中查V$session發現所有的連接都不存在了。這時無論怎么連都不會連上了(當然了網絡斷了嘛)。這時在恢復網絡連接,在數據庫中查V$session發現所有的連接還是不存在,連接池也無法恢復的。
 
robbin 寫道:
這台服務器上跑了很多網站,其中不乏好幾個Java做的網站,他們都建立了數據庫連接池。有一次我在MySQL Administrator里面查看連接,一時好奇,把那些數據庫連接池建立的連接都給kill掉了,我想看看會不會報錯? 結果呢?沒一會功夫,他們又自動連接上了,呵呵。我覺得現在的數據庫連接池都應該有這個功能吧。


kill掉的效果和網絡突然端的效果不一樣的,網絡斷了可能無法一下讓c/s雙方都明白連接已經斷了。像ssh登陸,如果網絡突然斷掉,服務器里的用戶還是顯示在線,和kill掉不一樣的。支持斷網重聯的pool應該有一個斷線檢測的機制。
 
引用:

kill掉的效果和網絡突然端的效果不一樣的,網絡斷了可能無法一下讓c/s雙方都明白連接已經斷了。像ssh登陸,如果網絡突然斷掉,服務器里的用戶還是顯示在線,和kill掉不一樣的。支持斷網重聯的pool應該有一個斷線檢測的機制。


同意!但我現在所用的如:dbcp,c3p0都不支持,weblogic可以通過管理重連。有沒有支持斷網重聯的pool?[/quote]
  
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM