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/