Druid是一个JDBC组件,它包括三部分:
1.DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。
2.DruidDataSource 高效可管理的数据库连接池。
3.SQLParser
每次web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都要花费0.05s~1s时间,且系统需要分配内存资源执行一次或者几次的数据库操作,不受太大影响,但是对于请求数据量过大,例如各大电子商务网站,频繁的请求且进行数据库连接操作势必占用很多系统资源,响应速度就会下降,甚至会造成服务器崩溃。
每一次连接并使用之后需要对数据库进行断开(否则程序会出现异常而无法关闭,导致数据库系统中的内存泄漏,而不得不重启数据库),且开发无法控制创建的链接对象数,系统的资源会无所顾忌分配出去,导致链接过多,而内存泄漏,服务器崩溃。
为解决上述问题,可以采用数据库连接池技术。数据库连接池的原理:
1)为数据库连接建立一个连接池
2)预先在连接池中放入一定数量的连接
3)当需要建立数据库连接的时候,使用连接池进行数据库连接,即从连接池中取出一个连接
4)执行数据库操作
5)操作完成再将该连接放回连接池
通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。数据库连接池的好处: 提供了数据库连接的利用率,减小了内存吞吐的开销。在开发过程中,不再关心数据库连接的问题,有数据库连接池帮助处理。
Druid可以做什么?
可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。
如下是一个基于Druid内置扩展StatFilter的监控实现:
Druid 的 JavaDoc 文档请看