Druid是一個JDBC組件,它包括三部分:
-
DruidDriver 代理Driver,能夠提供基於Filter-Chain模式的插件體系。
-
DruidDataSource 高效可管理的數據庫連接池。
-
SQLParser
Druid可以做什么?
1) 可以監控數據庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,能夠詳細統計SQL的執行性能,這對於線上分析數據庫訪問性能有幫助。
2) 替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴展性好的數據庫連接池。
3) 數據庫密碼加密。直接把數據庫密碼寫在配置文件中,這是不好的行為,容易導致安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。
4) SQL執行日志,Druid提供了不同的LogFilter,能夠支持Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的數據庫訪問情況。
擴展JDBC,如果你要對JDBC層有編程的需求,可以通過Druid提供的Filter-Chain機制,很方便編寫JDBC層的擴展插件。
[摘自OSChina:http://www.oschina.net/p/druid/]
使用druid的方式:
第一步:在spring中配置數據源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<
bean
id
=
"dataSource"
class
=
"com.alibaba.druid.pool.DruidDataSource"
destroy-method
=
"close"
>
<!-- 基本配置,訪問數據庫的driver、url、user、password -->
<
property
name
=
"driverClassName"
value
=
"${jdbc.druid.driverClassName}"
/>
<
property
name
=
"url"
value
=
"${jdbc.druid.url}"
/>
<
property
name
=
"username"
value
=
"${jdbc.druid.username}"
/>
<
property
name
=
"password"
value
=
"${jdbc.druid.password}"
/>
<!-- 配置初始化大小、最大、最小 -->
<
property
name
=
"initialSize"
value
=
"${jdbc.druid.initialSize}"
/>
<
property
name
=
"maxActive"
value
=
"${jdbc.druid.maxActive}"
/>
<
property
name
=
"minIdle"
value
=
"${jdbc.druid.minIdle}"
/>
<!-- 配置獲取連接等待超時的時間,單位是毫秒 -->
<
property
name
=
"maxWait"
value
=
"${jdbc.druid.maxWait}"
/>
<!-- 配置監控統計攔截的filters -->
<
property
name
=
"filters"
value
=
"${jdbc.druid.filters}"
/>
<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 -->
<
property
name
=
"timeBetweenEvictionRunsMillis"
value
=
"${jdbc.druid.timeBetweenEvictionRunsMillis}"
/>
<!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->
<
property
name
=
"minEvictableIdleTimeMillis"
value
=
"${jdbc.druid.minEvictableIdleTimeMillis}"
/>
<!-- 用來檢測連接是否有效的sql,要求是一個查詢語句。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會其作用。 -->
<!-- 查詢語句需要根據不同的數據源進行調整設置 -->
<
property
name
=
"validationQuery"
value
=
"${jdbc.druid.validationQuery}"
/>
<!-- 建議配置為true,不影響性能,並且保證安全性。申請連接的時候檢測,如果空閑時間大於timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。 -->
<
property
name
=
"testWhileIdle"
value
=
"${jdbc.druid.testWhileIdle}"
/>
<!-- 申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。 -->
<
property
name
=
"testOnBorrow"
value
=
"${jdbc.druid.testOnBorrow}"
/>
<!-- 歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能 -->
<
property
name
=
"testOnReturn"
value
=
"${jdbc.druid.testOnReturn}"
/>
<!-- 對於長時間不使用的連接強制關閉 -->
<
property
name
=
"removeAbandoned"
value
=
"${jdbc.druid.removeAbandoned}"
/>
<!-- 超過30分鍾開始關閉空閑連接 -->
<
property
name
=
"removeAbandonedTimeout"
value
=
"${jdbc.druid.removeAbandonedTimeout}"
/>
<!-- 將當前關閉動作記錄到日志 -->
<
property
name
=
"logAbandoned"
value
=
"${jdbc.druid.logAbandoned}"
/>
<!-- 設置數據庫事務是否自動提交,默認值為true -->
<
property
name
=
"defaultAutoCommit"
value
=
"${jdbc.druid.defaultAutoCommit}"
/>
<!-- 是否緩存preparedStatement,也就是PSCache。PSCache對支持游標的數據庫性能提升巨大。-->
<
property
name
=
"poolPreparedStatements"
value
=
"${jdbc.druid.poolPreparedStatements}"
/>
<!-- 要啟用PSCache,必須配置大於0,當大於0時,poolPreparedStatements自動觸發修改為true。 -->
<
property
name
=
"maxOpenPreparedStatements"
value
=
"${jdbc.druid.maxOpenPreparedStatements}"
/>
<
property
name
=
"maxPoolPreparedStatementPerConnectionSize"
value
=
"${jdbc.druid.maxPoolPreparedStatementPerConnectionSize}"
/>
</
bean
>
|
第二步:配置相關參數
配置相關參數
#根據不同的數據庫信息需要作出相應的調整,如driverClassName、url、maxActive、minIdle、maxWait、validationQuery等
jdbc.druid.driverClassName = org.hsqldb.jdbcDriver
jdbc.druid.url = jdbc:hsqldb:file:d:/tmp/User1.db;hsqldb.write_delay=true
jdbc.druid.username = sa
jdbc.druid.password =
jdbc.druid.initialSize = 5
jdbc.druid.maxActive = 20
jdbc.druid.minIdle = 10
jdbc.druid.maxWait = 3000
jdbc.druid.filters = stat
jdbc.druid.timeBetweenEvictionRunsMillis = 60000
jdbc.druid.minEvictableIdleTimeMillis = 300000
jdbc.druid.validationQuery = SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS
jdbc.druid.testWhileIdle = true
jdbc.druid.testOnBorrow = true
jdbc.druid.testOnReturn = false
jdbc.druid.removeAbandoned = true
jdbc.druid.removeAbandonedTimeout = 1800
jdbc.druid.logAbandoned = false
jdbc.druid.defaultAutoCommit = false
jdbc.druid.poolPreparedStatements = false
jdbc.druid.maxOpenPreparedStatements = 0
jdbc.druid.maxPoolPreparedStatementPerConnectionSize = 0
第三步:配置監控頁面
1
2
3
4
5
6
7
8
|
<
servlet
>
<
servlet-name
>DruidStatView</
servlet-name
>
<
servlet-class
>com.alibaba.druid.support.http.StatViewServlet</
servlet-class
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>DruidStatView</
servlet-name
>
<
url-pattern
>/druid/*</
url-pattern
>
</
servlet-mapping
>
|
通過以上配置,在應用啟動后訪問http://localhost:8080/prjname/druid/