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。連接異常要被拋出
哦 果然 謝謝指教。
kill掉的效果和網絡突然端的效果不一樣的,網絡斷了可能無法一下讓c/s雙方都明白連接已經斷了。像ssh登陸,如果網絡突然斷掉,服務器里的用戶還是顯示在線,和kill掉不一樣的。支持斷網重聯的pool應該有一個斷線檢測的機制。
同意!但我現在所用的如:dbcp,c3p0都不支持,weblogic可以通過管理重連。有沒有支持斷網重聯的pool?[/quote]
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
增加配置項如下:
#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 寫道: | ||
dbcp也有一個 validationQuery ,難道不行嗎? 哪里寫着不支持哪? |
哦 果然 謝謝指教。
好些日子沒到論談了,有這么多回貼,謝謝大家指教。
不過我可能沒有表達清楚,首先數據庫和服務器不在一台機器上,所以如: jdbc:oracle:thin:@localhost:1521:database 這樣的是不行的。應該是
: jdbc:oracle:thin:@ip:1521:database 問題是網絡終斷,比如:將網絡禁用。
在數據庫中查V$session發現所有的連接都不存在了。這時無論怎么連都不會連上了(當然了網絡斷了嘛)。這時在恢復網絡連接,在數據庫中查V$session發現所有的連接還是不存在,連接池也無法恢復的。
不過我可能沒有表達清楚,首先數據庫和服務器不在一台機器上,所以如: 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]
