天天看点

druid数据源

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:javascript:void(0)]

使用druid的方式:

第一步:在spring中配置数据源

在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

<code>&lt;</code><code>bean</code> <code>id</code><code>=</code><code>"dataSource"</code> <code>class</code><code>=</code><code>"com.alibaba.druid.pool.DruidDataSource"</code> <code>destroy-method</code><code>=</code><code>"close"</code><code>&gt;</code>

<code>    </code><code>&lt;!-- 基本配置,访问数据库的driver、url、user、password --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"driverClassName"</code> <code>value</code><code>=</code><code>"${jdbc.druid.driverClassName}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"url"</code> <code>value</code><code>=</code><code>"${jdbc.druid.url}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"username"</code> <code>value</code><code>=</code><code>"${jdbc.druid.username}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"password"</code> <code>value</code><code>=</code><code>"${jdbc.druid.password}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 配置初始化大小、最大、最小 --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"initialSize"</code> <code>value</code><code>=</code><code>"${jdbc.druid.initialSize}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"maxActive"</code> <code>value</code><code>=</code><code>"${jdbc.druid.maxActive}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"minIdle"</code> <code>value</code><code>=</code><code>"${jdbc.druid.minIdle}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 配置获取连接等待超时的时间,单位是毫秒 --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"maxWait"</code> <code>value</code><code>=</code><code>"${jdbc.druid.maxWait}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 配置监控统计拦截的filters --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"filters"</code> <code>value</code><code>=</code><code>"${jdbc.druid.filters}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"timeBetweenEvictionRunsMillis"</code> <code>value</code><code>=</code><code>"${jdbc.druid.timeBetweenEvictionRunsMillis}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"minEvictableIdleTimeMillis"</code> <code>value</code><code>=</code><code>"${jdbc.druid.minEvictableIdleTimeMillis}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。 --&gt;</code>

<code>    </code><code>&lt;!-- 查询语句需要根据不同的数据源进行调整设置 --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"validationQuery"</code> <code>value</code><code>=</code><code>"${jdbc.druid.validationQuery}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"testWhileIdle"</code> <code>value</code><code>=</code><code>"${jdbc.druid.testWhileIdle}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"testOnBorrow"</code> <code>value</code><code>=</code><code>"${jdbc.druid.testOnBorrow}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"testOnReturn"</code> <code>value</code><code>=</code><code>"${jdbc.druid.testOnReturn}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 对于长时间不使用的连接强制关闭 --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"removeAbandoned"</code> <code>value</code><code>=</code><code>"${jdbc.druid.removeAbandoned}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 超过30分钟开始关闭空闲连接 --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"removeAbandonedTimeout"</code> <code>value</code><code>=</code><code>"${jdbc.druid.removeAbandonedTimeout}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 将当前关闭动作记录到日志 --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"logAbandoned"</code> <code>value</code><code>=</code><code>"${jdbc.druid.logAbandoned}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 设置数据库事务是否自动提交,默认值为true --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"defaultAutoCommit"</code> <code>value</code><code>=</code><code>"${jdbc.druid.defaultAutoCommit}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大。--&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"poolPreparedStatements"</code> <code>value</code><code>=</code><code>"${jdbc.druid.poolPreparedStatements}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。 --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"maxOpenPreparedStatements"</code> <code>value</code><code>=</code><code>"${jdbc.druid.maxOpenPreparedStatements}"</code> <code>/&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"maxPoolPreparedStatementPerConnectionSize"</code> <code>value</code><code>=</code><code>"${jdbc.druid.maxPoolPreparedStatementPerConnectionSize}"</code> <code>/&gt;</code>

<code>&lt;/</code><code>bean</code><code>&gt;</code>

第二步:配置相关参数

配置相关参数

#根据不同的数据库信息需要作出相应的调整,如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

第三步:配置监控页面

访问页面配置

<code>&lt;</code><code>servlet</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>servlet-name</code><code>&gt;DruidStatView&lt;/</code><code>servlet-name</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>servlet-class</code><code>&gt;com.alibaba.druid.support.http.StatViewServlet&lt;/</code><code>servlet-class</code><code>&gt;</code>

<code>&lt;/</code><code>servlet</code><code>&gt;</code>

<code>&lt;</code><code>servlet-mapping</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>url-pattern</code><code>&gt;/druid/*&lt;/</code><code>url-pattern</code><code>&gt;</code>

<code>&lt;/</code><code>servlet-mapping</code><code>&gt;</code>

通过以上配置,在应用启动后访问http://localhost:8080/prjname/druid/