Druid連接池-阿里巴巴開源JDBC組件
來自: http://blog.csdn.net//chenleixing/article/details/45003753
Druid在連接池領域里可以說是比較火的,是阿里巴巴開源的JDBC連接池、監控組件,下面就簡單介紹它一下。
它包括三部分:
-
DruidDriver 代理Driver,能夠提供基于Filter-Chain模式的插件體系。
-
DruidDataSource 高效可管理的數據庫連接池。
-
SQLParser 。
功能:
. 可以監控數據庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,能夠詳細統計SQL的執行性能,這對于線上分析數據庫訪問性能有幫助。
. 替換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,是組合關系,并非替換關系 |