1. 程式人生 > 其它 >資料庫連線池-tomcat-jdbc食用筆記

資料庫連線池-tomcat-jdbc食用筆記

現在 主流的資料庫連線池有:Proxool、C3P0、DBCP、tomcat-jdbc、Druid。其中tomcat-jdbc是tomcat伺服器比較可靠的 資料庫連線池。

Tomcat 在 7.0 以前的版本都是使用commons-dbcp做為連線池的實現,但是DBCP存在一些問題:

  •     DBCP 是單執行緒的,為了保證執行緒安全會鎖整個連線池
  •     DBCP 效能不佳
  •     DBCP 太複雜,超過60個類,發展滯後。

    因此,通常J2EE中還會使用其它的高效能連線池,如C3P0,還有阿里系的druid等。為此,Tomcat 從 7.0 開始引入一個新的模組: Tomcat Jdbc Pool     Tomcat Jdbc Pool 近乎相容 DBCP,效能更高

  • 非同步方式獲取連線
  • Tomcat Jdbc Pool是Tomcat的一個模組,基於Tomcat-Juli,使用Tomcat的日誌框架
  • 使用 javax.sql.PooledConnection 介面獲取連線
  • 支援高併發應用環境
  • 超簡單,核心檔案只有8個,比 c3p0 還少
  • 更好的空閒連線處理機制
  • 支援 JMX
  • 支援 XA Connection。
  • Tomcat Jdbc Pool 可在 Tomcat 中直接使用,也可以在獨立的應用中使用。

1.作為JNDI資源使用

tomcat 資料來源JNDI配置樣例:

 <Resource name="jdbc/appdb" auth="Container"
              type="javax.sql.DataSource"
              maxActive="10000" maxIdle="100" maxWait="10000" logAbandoned="true"
              username="root" password="root123" driverClassName="oracle.jdbc.driver.OracleDriver"
              url="jdbc:oracle:thin:@10.45.47.88:1521:orcl"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
              testOnBorrow="false" testOnReturn="false"
              testWhileIdle="true"
              timeBetweenEvictionRunsMillis="30000"
    />

2.Spring容器中使用

<context:property-placeholder location="classpath:config/jdbc.properties"/>
<bean id="datasource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"    
    p:driverClassName="${jdbc.db.driverClassName}"
    p:url="${jdbc.db.url}"
    p:username="${jdbc.db.username}"
    p:password="${jdbc.db.password}"   
    p:initialSize="10"
    p:minIdle="10"
    p:maxIdle="100"
    p:maxActive="100"
    p:maxWait="6000"
    p:logAbandoned="true"
    p:testOnBorrow="false"
    p:testOnReturn="false"
    p:testWhileIdle="true"   
    p:timeBetweenEvictionRunsMillis="30000"
    p:minEvictableIdleTimeMillis="30000"
/>

3.配置注意事項

必須配置,才能啟用tomcat-jdbc:

factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"

並且資料庫驅動必須複製一份到tomcat/lib目錄下,如

JNDI 工廠與型別

屬性

描述

factory

必需的屬性,其值應為 org.apache.tomcat.jdbc.pool.DataSourceFactory

type

型別應為 javax.sql.DataSource 或 javax.sql.XADataSource。 根據型別,將建立org.apache.tomcat.jdbc.pool.DataSource 或 org.apache.tomcat.jdbc.pool.XADataSource。

常用屬性

屬性

描述

maxActive

(整形值)池同時能分配的活躍連線的最大數目。預設為 100。

maxIdle

(整型值)池始終都應保留的連線的最大數目。預設為 maxActive:100。會週期性檢查空閒連線(如果啟用該功能),留滯時間超過 minEvictableIdleTimeMillis 的空閒連線將會被釋放。(請參考 testWhileIdle)

minIdle

(整型值)池始終都應保留的連線的最小數目。如果驗證查詢失敗,則連線池會縮減該值。預設值取自 initialSize:10(請參考 testWhileIdle)。

initialSize

(整型值)聯結器啟動時建立的初始連線數。預設為 10。

maxWait

(整型值)在丟擲異常之前,連線池等待(沒有可用連線時)返回連線的最長時間,以毫秒計。預設為 30000(30 秒)

testOnBorrow

(布林值)預設值為 false。從池中借出物件之前,是否對其進行驗證。如果物件驗證失敗,將其從池中清除,再接著去借下一個。注意:為了讓 true 值生效,validationQuery 引數必須為非空字串。為了實現更高效的驗證,可以採用 validationInterval。

testOnReturn

(布林值)預設值為 false。將物件返回池之前,是否對齊進行驗證。注意:為了讓 true 值生效,validationQuery 引數必須為非空字串。

testWhileIdle

(布林值)是否通過空閒物件清除者(如果存在的話)驗證物件。如果物件驗證失敗,則將其從池中清除。注意:為了讓 true 值生效,validationQuery 引數必須為非空字串。該屬性預設值為 false,為了執行池的清除/測試執行緒,必須設定該值。(另請參閱 timeBetweenEvictionRunsMillis)

timeBetweenEvictionRunsMillis

(整型值)空閒連線驗證/清除執行緒執行之間的休眠時間(以毫秒計)。不能低於 1 秒。該值決定了我們檢查空閒連線、廢棄連線的頻率,以及驗證空閒連線的頻率。預設為 5000(5 秒)

其他請參考官方文件:https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

或者譯文:http://wiki.jikexueyuan.com/project/tomcat/tomcat-jdbc-pool.html