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

 

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

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

它包括三部分: github

  • DruidDriver 代理Driver,可以提供基於Filter-Chain模式的插件體系。 web

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

  • SQLParser 。sql

 

功能:數據庫

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

    .  替換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,>1000,5個時間分佈區域,單位爲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,是組合關係,並不是替換關係

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
2
相關文章
相關標籤/搜索