資料連線池

2021-07-02 23:42:04 字數 2486 閱讀 7146

現在常用的開源資料連線池主要有c3p0,dbcp和proxool三種,其中: 

hibernate開發組推薦使用c3p0; 

spring開發組推薦使用dbcp (dbcp連線池有weblogic連線池同樣的問題,就是強行關閉連線或資料庫重啟後,無法reconnect ,告訴連線被重置,這個設定可以解決); 

hibernate in action推薦使用c3p0和proxool; 

下面具體就每種連線池的調研結果進行說明:

1. apache-dbcp(basicdatasource) 

相關的引數說明

datasource: 要連線的 datasource (通常我們不會定義在 server.xml)

defaultautocommit: 對於事務是否 autocommit, 預設值為 true

defaultreadonly: 對於資料庫是否只能讀取, 預設值為 false

driverclassname:連線資料庫所用的 jdbc driver class,

maxactive: 可以從物件池中取出的物件最大個數,為0則表示沒有限制,預設為8

maxidle: 最大等待連線中的數量,設 0 為沒有限制(物件池中物件最大個數)

minidle:物件池中物件最小個數

maxwait: 最大等待秒數, 單位為 ms, 超過時間會丟出錯誤資訊

password: 登陸資料庫所用的密碼

url: 連線資料庫的 url

username: 登陸資料庫所用的帳號

validationquery: 驗證連線是否成功, sql select 指令至少要返回一行

removeabandoned: 是否自我中斷, 預設是 false

removeabandonedtimeout: 幾秒後會自我中斷, removeabandoned 必須為 true

logabandoned: 是否記錄中斷事件, 預設為 false

minevictableidletimemillis:大於0 ,進行連線空閒時間判斷,或為0,對空閒的連線不進行驗證;預設30分鐘

timebetweenevictionrunsmillis:失效檢查執行緒執行時間間隔,如果小於等於0,不會啟動檢查執行緒,預設-1

testonborrow:取得物件時是否進行驗證,檢查物件是否有效,預設為false

testonreturn:返回物件時是否進行驗證,檢查物件是否有效,預設為false

testwhileidle:空閒時是否進行驗證,檢查物件是否有效,預設為false

在使用dbcp的時候,如果使用預設值,則資料庫連線因為某種原因斷掉後,再從連線池中取得連線又不進行驗證,這時取得的連線實際上就會是無效的資料庫連線。因此為了防止獲得的資料庫連線失效,在使用的時候最好保證:

username: 登陸資料庫所用的帳號

validationquery:select count(*) from dual

testonborrow、testonreturn、testwhileidle:最好都設為true

minevictableidletimemillis:大於0 ,進行連線空閒時間判斷,或為0,對空閒的連線不進行驗證

timebetweenevictionrunsmillis:失效檢查執行緒執行時間間隔,如果小於等於0,不會啟動檢查執行緒

ps:在構造genericobjectpool [basicdatasource在其createdatasource () 方法中也會使用genericobjectpool] 時,會生成乙個內嵌類evictor,實現自runnable介面。如果timebetweenevictionrunsmillis大於0,每過timebetweenevictionrunsmillis毫秒evictor會呼叫evict()方法,檢查物件的閒置時間是否大於 minevictableidletimemillis毫秒(_minevictableidletimemillis小於等於0時則忽略,預設為30分鐘),是則銷毀此物件,否則就啟用並校驗物件,然後呼叫ensureminidle方法檢查確保池中物件個數不小於_minidle。在呼叫returnobject方法把物件放回物件池,首先檢查該物件是否有效,然後呼叫poolableobjectfactory 的passivateobject方法使物件處於非活動狀態。再檢查物件池中物件個數是否小於maxidle,是則可以把此物件放回物件池,否則銷毀此物件

30 1000

false

test

false

100

null

false 60

3 60

15100

3 root

password

select id from test where id=1

300false

true

root

false

con_test

30000

3010

3025100

200300

資料庫連線池 Redis連線池

基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...

mysql資料連線池

示例 usr bin python coding utf 8 time 2017 11 21 0021 10 52 author liaochao file demo2.py import mysqldb from dbutils.pooleddb import pooleddb db config...

springboot資料連線池

目錄 預設資料來源 hikaridatasource 配置檔案 mysql 超時時間設定 spring datasource driver class name com.mysql.jdbc.driver username password url jdbc mysql characterencod...