版權聲明:本文爲博主原創文章,未經博主容許不得轉載。mysql
Druid在鏈接池領域裏能夠說是比較火的,是阿里巴巴開源的JDBC鏈接池、監控組件,下面就簡單介紹它一下。git
它包括三部分: github
DruidDriver 代理Driver,可以提供基於Filter-Chain模式的插件體系。 web
DruidDataSource 高效可管理的數據庫鏈接池。 spring
SQLParser 。sql
功能:數據庫
. 能夠監控數據庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,可以詳細統計SQL的執行性能,這對於線上分析數據庫訪問性能有幫助。 apache
. 替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴展性好的數據庫鏈接池。 編程
. 數據庫密碼加密。直接把數據庫密碼寫在配置文件中,這是很差的行爲,容易致使安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。 數組
. SQL執行日誌,Druid提供了不一樣的LogFilter,可以支持Common-Logging、Log4j和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 |
|
配置這個屬性的意義在於,若是存在多個數據源,監控的時候能夠經過名字來區分開來。 |
jdbcUrl |
|
鏈接數據庫的url,不一樣數據庫不同。例如: |
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 |
|
有兩個含義: |
numTestsPerEvictionRun |
|
再也不使用,一個DruidDataSource只支持一個EvictionRun |
minEvictableIdleTimeMillis |
|
|
connectionInitSqls |
|
物理鏈接初始化的時候執行的sql |
exceptionSorter |
根據dbType自動識別 |
當數據庫拋出一些不可恢復的異常時,拋棄鏈接 |
filters |
|
屬性類型是字符串,經過別名的方式配置擴展插件,經常使用的插件有: |
proxyFilters |
|
類型是List<com.alibaba.druid.filter.Filter>,若是同時配置了filters和proxyFilters,是組合關係,並不是替換關係 |