最近遇到了乙個奇怪的問題,使用了apache的連線池,當資料庫重啟之後,就無法連線到資料庫上了,開始以為是程式的問題,看了一些**,無用。後經同事提示,在連線池的配置中加了一項:
validationquery
select 1
就ok了,才明白這個是用來檢查連線的,當訪問量不大時,連線池中的連線足夠用,它不會去申請新的連線,但原有的連線已經被重置了,也就是reset了,無法使用,因此對於使用連線池,應該加上面的配置,以檢查資料庫連線。
同樣,使用spring來配置連線池的時候也應該加上:
select 1
防止資料庫重新啟動後出現問題。
spring下的各種連線池的比較
hibernate 開發組推薦c3p0,spring開發組推薦dbcp,但是dbcp連線池有weblogic連線池同樣的問題,就是強行關閉連線或資料庫重啟後,無法 reconnect ,告訴連線被重置,這個設定可以解決。hibernate in action推薦c3p0和proxool。
我推薦proxool,因為他不但可以監控後台。還可以有效的釋放連線。在connection close時,也就是歸還connection,
關閉所有的statement,並且判斷是否autocommit,如果不行,就rollback,並且設定true,
可以參考proxool的org.logicalcobwebs.proxool.connectionresetter類
connection pool把connection reset置回initial state。
dbcp的配置
select 1
true
c3p0的配置, 注意是''driverclass' , 'jdbcurl', 'user' , 'password'
net.sourceforge.jtds.jdbc.driver
jdbc:jtds:sqlserver://localhost:1433/hua
sahua155
25或$$
5100
100010$
$xapool的配置
com.mysql.jdbc.driver
jdbc:mysql://localhost/dbname
root
mypass15
select 1
c-jdbc的配置
jdbc:cjdbc:
weblogic的連線池解決辦法:test reserved connections: 如果選擇了這個選項,伺服器會在把連線提供給客戶端之前
對其進行測試。 test created connections: 如果選擇了這個選項,就會在建立乙個jdbc
連線之後和在把它新增到jdbc連線池中的可用連線列表之前,對該jdbc連線進行測試。
tomcat的jndi關於dbcp的配置:
factory
org.apache.commons.dbcp.basicdatasourcefactory
driverclassname
com.sybase.jdbc2.jdbc.sybdriver
urlxyz
username
xyzpassword
xyzmaxactive
5maxidle
5maxwait
-1removeabandoned
true
validationquery
select count(*) from sometable where 1 = 0
testonborrow
true
spring下連線池比較
最近遇到了乙個奇怪的問題,使用了apache的連線池,當資料庫重啟之後,就無法連線到資料庫上了,開始以為是程式的問題,看了一些 無用。後經同事提示,在連線池的配置中加了一項 validationquery select 1 就ok了,才明白這個是用來檢查連線的,當訪問量不大時,連線池中的連線足夠用,...
spring下連線池比較
validationquery select 1 就ok了,才明白這個是用來檢查連線的,當訪問量不大時,連線池中的連線足夠用,它不會去申請新的連線,但原有的連線已經被重置了,也就是reset了,無法使用,因此對於使用連線池,應該加上面的配置,以檢查資料庫連線。同樣,使用spring來配置連線池的時候...
spring下連線池比較
最近遇到了乙個奇怪的問題,使用了apache的連線池,當資料庫重啟之後,就無法連線到資料庫上了,開始以為是程式的問題,看了一些 無用。後經同事提示,在連線池的配置中加了一項 validationquery select 1 就ok了,才明白這個是用來檢查連線的,當訪問量不大時,連線池中的連線足夠用,...