Druid連接池-阿里巴巴開源JDBC組件

xylongxing 10年前發布 | 46K 次閱讀 數據庫連接池

來自: http://blog.csdn.net//chenleixing/article/details/45003753


Druid在連接池領域里可以說是比較火的,是阿里巴巴開源的JDBC連接池、監控組件,下面就簡單介紹它一下。

它包括三部分: 

  • DruidDriver 代理Driver,能夠提供基于Filter-Chain模式的插件體系。 

  • DruidDataSource 高效可管理的數據庫連接池。 

  • SQLParser 。

功能:

    .  可以監控數據庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,能夠詳細統計SQL的執行性能,這對于線上分析數據庫訪問性能有幫助。 

    .  替換DBCPC3P0。Druid提供了一個高效、功能強大、可擴展性好的數據庫連接池。 

    .  數據庫密碼加密。直接把數據庫密碼寫在配置文件中,這是不好的行為,容易導致安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。 

    .  SQL執行日志,Druid提供了不同的LogFilter,能夠支持Common-LoggingLog4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的數據庫訪問情況。 

    .  擴展JDBC,如果你要對JDBC層有編程的需求,可以通過Druid提供的Filter-Chain機制,很方便編寫JDBC層的擴展插件。

 

屬性跟dbcp連接池的差不多,不過加入了 filters 監控(value 值要有 stat),在web.xml里加入下面的Servlet就可查看例: http://localhost:8080/BenbearGame_test/。druid跟spring 一起用時( 只要配置initialSize,maxActive就可以),加入其實配置性能不好,官方文檔里也不沒加其它屬性

<!--數據源org.apache.commons.dbcp.BasicDataSource com.alibaba.druid.pool.DruidDataSource -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/mybatis" />
<property name="username" value="root" />
<property name="password" value="admin" />


<!-- druid 連接池的 -->
<property name="filters" value="stat" />

<!-- 下面druid 和 dbcp 連接池通用的 ↓↓↓↓↓↓↓↓↓↓↓↓ -->
<!--maxActive: 最大連接數量 -->
<property name="maxActive" value="20" />
<!--initialSize: 初始化連接 -->
<property name="initialSize" value="5" />

</bean> 


filters 監控 Servlet
 
http://localhost:8080/BenbearGame_test/druid 
<servlet>
<servlet-name>DruidStatView<rvlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet<rvlet-class>
<rvlet>
<servlet-mapping>
<servlet-name>DruidStatView<rvlet-name>
<url-pattern>/druid/*</url-pattern>
<rvlet-mapping> 

 

http://blog.csdn.net/yunnysunny/article/details/8657095

 

ExecuteCount

當前sql已執行次數

 

ExecTime

當前sql已執行時間

 

ExecMax

當前sql最大執行時間

 

Txn

當前運行的事務數量

 

Error

當前sql執行出錯的數目

 

Update

當前sql更新或者刪除操作中已經影響的行數

 

FetchRow

當前sql操作中已經讀取的行數

 

Running

當前sql正在運行的數目

 

Concurrent

當前sql最大并發執行數 

 

ExecHisto 

當前sql做execute操作的時間分布數組

分為0-1,1-10,10-100,100-1000>10005個時間分布區域,單位為ms

ExecRsHisto 

當前sql做execute操作和resultSet

打開至關閉的時間總和分布數組

同上

FetchRowHisto

當前sql查詢時間分布數組

同上

UpdateHisto 

當前sql更新、刪除時間分布數組

同上

 

配置屬性:

 

配置

缺省值

說明

name

 

配置這個屬性的意義在于,如果存在多個數據源,監控的時候可以通過名字來區分開來。
如果沒有配置,將會生成一個名字,格式是:"DataSource-" + System.identityHashCode(this)

jdbcUrl

 

連接數據庫的url,不同數據庫不一樣。例如:
mysql : jdbc:mysql://10.20.153.104:3306/druid2 
oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto

username

 

連接數據庫的用戶名

password

 

連接數據庫的密碼。如果你不希望密碼直接寫在配置文件中,可以使用ConfigFilter。詳細看這里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

driverClassName

根據url自動識別

這一項可配可不配,如果不配置druid會根據url自動識別dbType,然后選擇相應的driverClassName

initialSize

0

初始化時建立物理連接的個數。初始化發生在顯示調用init方法,或者第一次getConnection時

maxActive

8

最大連接池數量

maxIdle

8

已經不再使用,配置了也沒效果

minIdle

 

最小連接池數量

maxWait

 

獲取連接時最大等待時間,單位毫秒。配置了maxWait之后,缺省啟用公平鎖,并發效率會有所下降,如果需要可以通過配置useUnfairLock屬性為true使用非公平鎖。

poolPreparedStatements

false

是否緩存preparedStatement,也就是PSCache。PSCache對支持游標的數據庫性能提升巨大,比如說oracle。在mysql下建議關閉。

maxOpenPreparedStatements

-1

要啟用PSCache,必須配置大于0,當大于0時,poolPreparedStatements自動觸發修改為true。在Druid中,不會存在Oracle下PSCache占用內存過多的問題,可以把這個數值配置大一些,比如說100

validationQuery

 

用來檢測連接是否有效的sql,要求是一個查詢語句。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會其作用。

testOnBorrow

true

申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。

testOnReturn

false

歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能

testWhileIdle

false

建議配置為true,不影響性能,并且保證安全性。申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。

timeBetweenEvictionRunsMillis

 

有兩個含義:
1) Destroy線程會檢測連接的間隔時間 2) testWhileIdle的判斷依據,詳細看testWhileIdle屬性的說明

numTestsPerEvictionRun

 

不再使用,一個DruidDataSource只支持一個EvictionRun

minEvictableIdleTimeMillis

 

 

connectionInitSqls

 

物理連接初始化的時候執行的sql

exceptionSorter

根據dbType自動識別

當數據庫拋出一些不可恢復的異常時,拋棄連接

filters

 

屬性類型是字符串,通過別名的方式配置擴展插件,常用的插件有:
監控統計用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall

proxyFilters

 

類型是List<com.alibaba.druid.filter.Filter>,如果同時配置了filters和proxyFilters,是組合關系,并非替換關系

 

 

 

 

 

 

 

 

 

 

 

 本文由用戶 xylongxing 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!