資料庫連線池-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