spring連線池配置詳解

2021-06-04 06:22:12 字數 3442 閱讀 2039

資料庫連線池概述:資料庫連線是一種關鍵的有限的昂貴的資源,這一點在多使用者的網頁應用程式中體現得尤為突出。對資料庫連線的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的效能指標。資料庫連線池正是針對這個問題提出來的。

資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用乙個現有的資料庫連線,而再不是重新建立乙個;釋放空閒時間超過最大空閒時間的資料庫連線來避免因為沒有釋放資料庫連線而引起的資料庫連線遺漏。這項技術能明顯提高對資料庫操作的效能。

資料庫連線池在初始化時將建立一定數量的資料庫連線放到連線池中,這些資料庫連線的數量是由最小資料庫連線數來設定的。無論這些資料庫連線是否被使用,連線池都將一直保證至少擁有這麼多的連線數量。連線池的最大資料庫連線數量限定了這個連線池能占有的最大連線數,當應用程式向連線池請求的連線數超過最大連線數量時,這些請求將被加入到等待佇列中。資料庫連線池的最小連線數和最大連線數的設定要考慮到下列幾個因素:

1) 最小連線數是連線池一直保持的資料庫連線,所以如果應用程式對資料庫連線的使用量不大,將會有大量的資料庫連線資源被浪費;

2) 最大連線數是連線池能申請的最大連線數,如果資料庫連線請求超過此數,後面的資料庫連線請求將被加入到等待佇列中,這會影響之後的資料庫操作。

3) 如果最小連線數與最大連線數相差太大,那麼最先的連線請求將會獲利,之後超過最小連線數量的連線請求等價於建立乙個新的資料庫連線。不過,這些大於最小連線數的資料庫連線在使用完不會馬上被釋放,它將被放到連線池中等待重複使用或是空閒超時後被釋放。

目前常用的連線池有:c3p0、dbcp、proxool

網上的評價是:

c3p0比較耗費資源,效率方面可能要低一點。

dbcp在實踐中存在bug,在某些種情會產生很多空連線不能釋放,hibernate3.0已經放棄了對其的支援。

proxool的負面評價較少,現在比較推薦它,而且它還提供即時監控連線池狀態的功能,便於發現連線洩漏的情況。

配置如下:

oracle.jdbc.driver.oracledriver

jdbc:oracle:thin:***x/***[email protected]:1521:server

***x

***x

server

30000

select 1 from dual

true

true

5 400

10 1m,15m,1d

error

true

false

1600

600000

false

然後注入到sessionfactory中

屬性列表說明:

fatal-sql-exception: 它是乙個逗號分割的資訊片段.當乙個sql異常發生時,他的異常資訊將與這個資訊片段進行比較.如果在片段中存在,那麼這個異常將被認為是個致命錯誤(fatal sql exception ).這種情況下,資料庫連線將要被放棄.無論發生什麼,這個異常將會被重擲以提供給消費者.使用者最好自己配置乙個不同的異常來丟擲.

house-keeping-sleep-time: house keeper 保留執行緒處於睡眠狀態的最長時間,house keeper 的職責就是檢查各個連線的狀態,並判斷是否需要銷毀或者建立.

house-keeping-test-sql:  如果發現了空閒的資料庫連線.house keeper 將會用這個語句來測試.這個語句最好非常快的被執行.如果沒有定義,測試過程將會被忽略。

injectable-connection-inte***ce: 允許proxool實現被**的connection物件的方法.

injectable-statement-inte***ce: 允許proxool實現被**的statement 物件方法.

injectable-prepared-statement-inte***ce: 允許proxool實現被**的preparedstatement 物件方法.

injectable-callable-statement-inte***ce: 允許proxool實現被**的callablestatement 物件方法.

jmx: 如果屬性為true,就會註冊乙個訊息bean到jms服務,訊息bean物件名: "proxool:type=pool, name=". 預設值為false.

jmx-agent-id: 乙個逗號分隔的jmx**列表(如使用mbeanserve***ctory.findmbeanserver(string agentid)註冊的連線池。)這個屬性是僅當"jmx"屬性設定為"true"才有效。所有註冊jmx伺服器使用這個屬性是不確定的

jndi-name: 資料來源的名稱

maximum-active-time: 如果housekeeper 檢測到某個執行緒的活動時間大於這個數值.它將會殺掉這個執行緒.所以確認一下你的伺服器的頻寬.然後定乙個合適的值.預設是5分鐘.

maximum-connection-count: 最大的資料庫連線數.

maximum-connection-lifetime: 乙個執行緒的最大壽命.

minimum-connection-count: 最小的資料庫連線數

overload-without-refusal-lifetime: 這可以幫助我們確定連線池的狀態。如果我們已經拒絕了乙個連線在這個設定值(毫秒),然後被認為是超載。預設為60秒。

prototype-count: 連線池中可用的連線數量.如果當前的連線池中的連線少於這個數值.新的連線將被建立(假設沒有超過最大可用數).例如.我們有3個活動連線2個可用連線,而我們的prototype-count是4,那麼資料庫連線池將試圖建立另外2個連線.這和 minimum-connection-count不同. minimum-connection-count把活動的連線也計算在內.prototype-count 是spare connections 的數量.

recently-started-threshold: 這可以幫助我們確定連線池的狀態,連線數少還是多或超載。只要至少有乙個連線已開始在此值(毫秒)內,或者有一些多餘的可用連線,那麼我們假設連線池是開啟的。預設為60秒

statistics:  連線池使用狀況統計。 引數「10s,1m,1d」

statistics-log-level: 日誌統計跟蹤型別。 引數「error」或 「info」

test-before-use: 如果為true,在每個連線被測試前都會服務這個連線,如果乙個連線失敗,那麼將被丟棄,另乙個連線將會被處理,如果所有連線都失敗,乙個新的連線將會被建立。否則將會丟擲乙個sqlexception異常。

test-after-use: 如果為true,在每個連線被測試後都會服務這個連線,使其回到連線池中,如果連線失敗,那麼將被廢棄。

trace: 如果為true,那麼每個被執行的sql語句將會在執行期被log記錄(debug level).你也可以註冊乙個connectionlistener (參看proxoolfacade)得到這些資訊.

Spring配置連線池

spring配置c3p0連線池 第一步 匯入jar包 第二步 建立spring配置檔案,配置連線池 combopooleddatasource datasource new combopooleddatasource datasource.setdriverclass com.mysql.jdbc....

Spring配置連線池

spring 配置proxool連線池 在我的工程中,檔案名叫hibernate.cfg.xml,和entity放在一起 或者直接寫成com.mysql.jdbc.driver true true 50true true true 1,false 0,yes y no n com.mysteel.e...

DBCP連線池配置詳解

部分引數中文說明 引數預設值 可選值格式 說明username 使用者名稱password 密碼url 資料庫連線url driverclassname 驅動類connectionproperties propertyname property 當建立新連線時被傳送給jdbc驅動的連線引數 defa...